[ios]Java vs Objective-c utf-8 编码

发布时间: 2017/3/28 22:34:40
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我需要转换到 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。

解决方法 1:

正确的 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() qutoing javadoc 从︰

将此字符串到字节序列的使用平台的默认字符集,将结果存储到一个新的字节数组编码。

因此,平台的使用默认编码,所以结果可能会改变从平台,所以它总是推荐状态中的编码你想要的结果,例如︰

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