2014-11-06 48 views
1

我需要將java代碼轉換爲objective-c,但我被卡在字符串中進行字節數組轉換。Java vs Objective-c UTF-8編碼

在java中我有:

String Key="1234567890"; 
byte[] xKey = Key.getBytes(); 
System.out.println(Arrays.toString(xKey)); 

而且它打印:

[49, 50, 51, 52, 53, 54, 55, 56, 57, 48] 

而在Objective-C,我有:

NSString *Key = @"1234567890"; 
(1) NSData * xKey = [key dataUsingEncoding:NSUTF8StringEncoding]; 
(2) NSLog(@"%@", xKey); 

和它打印:

<31323334 3536373839 30> 

在(1)我使用:

const char * xKey = [Key UTF8String]; 

和(2)中我使用:

NSLog(@"%@s", xKey); 

在UTF-8 48個對應於0

+0

你能給出更多關於你爲什麼要讓你的'NSLog'輸出看起來像Android的'println'的更多上下文? – 2014-11-06 20:30:12

+0

我需要比較兩個輸出是相同的,以便在代碼的其餘部分進一步深入 – 2014-11-06 20:32:25

回答

2

正確UTF-8的String"1234567890"的編碼形式僅僅是代碼它的字符的,因爲所有所使用1個字節(它們的代碼都小於127)編碼:

[49, 50, 51, 52, 53, 54, 55, 56, 57, 48] 

注:Arrays.toString(byte[])使用字節的十進制表示來構建陣列的String表示。

如果你仔細看,Objective-C的結果是完全一樣的,它只是以十六進制基數:

<31323334 3536373839 30> 

0X31 = 49
0x32 = 50
...
的0x30 = 48

順便說String.getBytes() q從的Javadoc utoing:

將此String解碼使用平臺的默認字符集字節序列,並將結果存儲到一個新的字節數組。

所以平臺的默認編碼使用,所以結果也可以從平臺到平臺的改變,所以它總是建議國家在編碼你想要的結果,例如:

byte[] xKey = Key.getBytes(StandardCharsets.UTF_8); 
0

使用:

byte[] xKey = Key.getBytes(StandardCharsets.UTF_8); 
+0

問題不在於java。並使用此返回相同(49,50,....)。但是,謝謝 – 2014-11-06 20:29:36