1

過去に使用した言語に応じて、同じ文字列に対して異なる JSON エンコードされた値を経験しました。API はクローズド環境 (サード パーティは許可されていません) で使用されていたため、妥協し、すべての Java アプリケーションは手動で Unicode 文字をエンコードしています。LinkedIn の API は、基本的に Java アプリケーションと同じように、「破損した」値を返しています。私はすでに彼らのフォーラムに質問を投稿しました。ここでも質問する理由は非常に単純です。共有は思いやりです:) したがって、この質問はLinkedInに部分的に関連していますが、主に以下に説明する一般的なエンコードの問題に対する答えを見つけようとしています.

ご覧のとおり、私の姓には文字が含まれていžます\u017eが、Java (または LinkedIn の API) は\u009eJSON で返され、XML 応答では何も返されません。PHPjson_decode()はそれを無視し、私の姓は Kurida になります。

調査の結果、žどうやら9e17eの 2 つの表現があることがわかりました。ここで何が起こっているのですか?この問題の解決策はありますか?

4

1 に答える 1

0

U+009E は、通常は見えない制御文字であり、 の代替表現として受け入れられませんž

バイト0x9E は、Windows コード ページ 1252 の文字を表しますž。このバイトを ISO-8859-1 を使用してデコードすると、U+009E になります。

(この混乱はž、HTML ページに書き込むと、ブラウザが実際に文字 U+009E を提供するのではなく、予想どおりに U+017E に変換するという事実から生じます。すべての文字について同じことが当てはまります。参照 0080–009F: 数値が Unicode 文字ではなく cp1252 バイトを参照しているかのように変更されます. これはまったく奇妙で間違った動作ですが、すべての主要なブラウザーがこれを行うため、現在はこれに固執しています. 適切な XHTML が提供されている場合を除きます.より賢明な XML 規則に従う必要があるためです。)

フォーラム ページを見ると、JSON の読み方は明らかに間違っていません。あなたの名前は「David Kurid[U+009E]a」として登録されています。ただし、そのデータがシステムに取り込まれていることを確認する必要があります。

于 2010-10-29T14:25:43.163 に答える