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('בדיקה')

この違いにより、次のハッシュ アルゴリズムが壊れます。2 つの文字列を同じ方法でエンコードするにはどうすればよいですか? 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. 3 番目の列は、2 つの UTF-8 バイト「d7 91」を示しています</li>

見続けると、PHP と Objective-C が実際には同じであることがわかります。あなたが見ている「問題」は、PHP が Unicode エスケープ ( \u) を使用しているのに対し、Objective-C は直接バイト 16 進エスケープ ( \x) を使用していることです。これらは文字列の視覚的表現に過ぎず、メモリ内のバイトは実際には同じです。

ハッシュ アルゴリズムがバイトを正しく処理する場合、違いは見られないはずです。

于 2013-06-14T22:23:07.017 に答える