簡體   English   中英

Java與Objective-c UTF-8編碼

[英]Java vs Objective-c UTF-8 Encoding

我需要將Java代碼轉換為Objective-C,但我陷入了字符串到字節數組轉換的困境。

在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。

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

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

注意: Arrays.toString(byte[])使用Arrays.toString(byte[])的十進制表示形式來構造數組的String表示形式。

如果仔細觀察,則Objective-c結果完全相同 ,只是以十六進制基數打印:

<31323334 3536373839 30>

0x31 = 49
0x32 = 50
...
0x30 = 48

通過String.getBytes String.getBytes()從javadoc退出:

使用平台的默認字符集將此String編碼為字節序列,並將結果存儲到新的字節數組中。

因此,使用平台的默認編碼,因此結果可能會因平台而異,因此始終建議您聲明要使用哪種編碼,例如:

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

采用:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM