XMLとJSON変換における文字エンコーディング

XMLとJSON間の文字エンコーディングの違いを処理する方法。UTF-8、UTF-16、XMLエンティティ参照、変換時の正確な文字保持について解説します。

Advanced

詳細な説明

文字エンコーディングはXMLとJSONで異なる扱いを受けるため、変換時のミスマッチはデータ破損を引き起こす可能性があります。

XMLのエンコーディングの柔軟性:

XMLは複数の文字エンコーディングをサポートし、XML宣言で宣言します:

<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-16"?>
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml version="1.0" encoding="Shift_JIS"?>

JSONのエンコーディングは常にUTF-8。 RFC 8259に従い、システム間で交換されるJSONテキストはUTF-8でエンコードする必要があります。エンコーディング宣言は不要であり、記述もできません。

XML文字参照:

XMLは数値参照を使って文字を表現できます:

<text>Caf&#233; &#x2014; a nice place</text>

JSONでは、これらは実際のUnicode文字になります。

XMLの定義済みエンティティ:

XMLには要素コンテンツと属性値でエスケープが必要な5つの定義済みエンティティ参照があります:

エンティティ 文字 JSON等価物
&lt; < <(直接)
&gt; > >(直接)
&amp; & &(直接)
&quot; " \"(エスケープ)
&apos; ' '(直接)

変換の考慮事項:

  1. XMLからJSON: すべてのエンティティ参照と文字参照を実際の文字にデコードします。JSON出力にはXMLエスケープシーケンスではなく実際の文字を含めるべきです。
  2. JSONからXML: エンティティ参照またはCDATAセクションを使って特殊文字をエスケープします。少なくとも <>& はテキストコンテンツでエスケープが必要です。
  3. BMPの範囲外の文字(絵文字、CJK拡張)は両形式で有効ですが、JSONではサロゲートペア、XMLでは数値参照が必要な場合があります。

ベストプラクティス: 変換時は常にUTF-8に正規化してください。ソースXMLが非UTF-8エンコーディングを使用している場合、パース前にバイトをUTF-8にトランスコードしてください。

ユースケース

Shift_JISエンコーディングを使用する日本のレガシーシステムのXMLドキュメントをモダンなWebアプリケーション用のUTF-8 JSONに変換し、すべての漢字が正しく保持されることを確認する場合。

試してみる — JSON ↔ XML Converter

フルツールを開く