为什么PHP和Obj-C对字符串进行不同的编码?

时间:2013-06-14 20:46:47

标签: php objective-c utf-8 character-encoding

我正在尝试在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吗?

2 个答案:

答案 0 :(得分:2)

  1. 转到http://www.utf8-chartable.de/unicode-utf8-table.pl
  2. 在组合框中切换到“U + 0590 ... U + 5FF Hebrew”
  3. 向下滚动到“U + 05D1”,这是输入字符串中最右边的字符。
  4. 第三列显示两个UTF-8字节:“d7 91”
  5. 如果你继续寻找,你会发现PHP和Objective-C实际上是相同的。您遇到的“问题”是,虽然PHP使用Unicode转义(\u),但Objective-C使用直接字节十六进制转义(\x)。那些只是字符串的直观表示,内存中的字节实际上是相同的。

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

答案 1 :(得分:1)

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

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