2

我正在尝试在 obj-c 和 php 上将字符串转换为 UTF8。我得到不同的结果:

"\xd7\x91\xd7\x93\xd7\x99\xd7\xa7\xd7\x94" //Obj-C
"\u05d1\u05d3\u05d9\u05e7\u05d4" //PHP

obj-C 代码:

const char *cData = [@"בדיקה" cStringUsingEncoding:NSUTF8StringEncoding]

PHP代码:

utf8_encode('בדיקה')

这种差异破坏了我接下来的哈希算法。如何使两个字符串以相同的方式编码?我应该更改 obj-c\php 吗?

4

2 回答 2

2
  1. 转到http://www.utf8-chartable.de/unicode-utf8-table.pl
  2. 在组合框中切换到“U+0590 ... U+5FF 希伯来语”</li>
  3. 向下滚动到“U+05D1”,这是输入字符串最右边的字符。
  4. 第三列显示两个 UTF-8 字节:“d7 91”</li>

如果你继续看,你会发现 PHP 和 Objective-C 实际上是一样的。您看到的“问题”是 PHP 使用 Unicode 转义 ( \u),而 Objective-C 使用直接字节十六进制转义 ( \x)。这些只是字符串的视觉表示,内存中的字节实际上是相同的。

如果您的哈希算法正确处理字节,您应该看不到差异。

于 2013-06-14T22:23:07.017 回答
1

你用什么在 PHP 上进行编码?看起来您正在生成一个 UTF-16 字符串。

试试utf8_encode()看看是否能提供更好的结果。

于 2013-06-14T20:57:04.450 回答