質問

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

ご覧のとおり、私の姓には文字が含まれています ž, 、そうあるべきです \u017e しかし、Java(またはその点でLinkedInのAPI)が戻ります \u009e JSONを使用して、XML応答では何もありません。 PHPの json_decode() それを無視し、私の姓はKuridaになります。

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

役に立ちましたか?

解決

u+009eは、通常は想像可能な制御文字であり、許容可能な代替表現ではありません ž.

バイト 0x9eは文字を表します ž Windowsコードページ1252では、そのバイトは、ISO-8859-1を使用してデコードされた場合、U+009Eに変わります。

(混乱は、あなたが書くならば ž HTMLページでは、ブラウザは実際にはキャラクターu+009eを提供しませんが、予想されるかもしれませんが、u+017eに変換します。すべての文字参照0080–009Fにも同じことが言えます。まるで数字がUnicode文字の代わりにCP1252バイトと呼ばれるかのように変更されます。これは完全に奇妙で間違った動作ですが、すべての主要なブラウザがそれを行うので、私たちは今それに固執しています。適切なXHTMLを除いて、より賢明なXMLルールに従う必要があるため、XMLとして機能しました。)

フォーラムページを見ると、JSON読み取りは明らかに間違っていません。あなたの名前は「David Kurid [U+009e] A」として登録されています。ただし、そのデータは、システムのニーズを検討しています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top