XMLエンコーディング宣言 — UTF-8、UTF-16、文字セット
XMLプロローグのエンコーディング宣言を理解します。UTF-8、UTF-16、ISO-8859-1、エンコーディングがパースに与える影響、エンコーディング不一致エラーの修正方法を解説します。
Validation
詳細な説明
XMLエンコーディング宣言
XMLプロローグのエンコーディング宣言は、ドキュメントで使用されている文字エンコーディングをパーサーに伝えます。これを誤ると、文字化け、パース失敗、データ破損につながります。
XMLプロローグ
<?xml version="1.0" encoding="UTF-8"?>
<root>
<message>Hello, world!</message>
</root>
encoding 属性は文字エンコーディングを指定します。省略された場合、デフォルトでUTF-8が想定されます(BOMが存在する場合はUTF-16)。
一般的なエンコーディング
| エンコーディング | 説明 | 用途 |
|---|---|---|
| UTF-8 | 可変幅、ASCII互換 | 現代XMLのデフォルト、Webコンテンツ |
| UTF-16 | 固定2バイト(またはサロゲートペア) | Windows API、Java内部文字列 |
| ISO-8859-1 | 西ヨーロッパ、シングルバイト | レガシー欧州システム |
| Shift_JIS | 日本語、可変幅 | レガシー日本語システム |
| Windows-1252 | Windows西ヨーロッパスーパーセット | レガシーWindowsアプリケーション |
エンコーディング不一致エラー
最も一般的な問題は、あるエンコーディングを宣言しながらファイルを別のエンコーディングで保存することです:
<!-- ファイルはUTF-8で保存されているが宣言は: -->
<?xml version="1.0" encoding="ISO-8859-1"?>
これにより、パーサーがマルチバイトUTF-8シーケンスをISO-8859-1文字として誤解釈し、非ASCII文字で文字化け(mojibake)が発生します。
エンコーディング問題の修正方法
- 実際のファイルエンコーディングを確認 — hexエディタまたは
fileコマンドを使用 - 宣言を実際のエンコーディングに合わせる
- 必要に応じてUTF-8に変換 —
iconvなどのツールを使用:iconv -f ISO-8859-1 -t UTF-8 input.xml > output.xml - 宣言を更新 —
encoding="UTF-8"に変更
BOM(バイトオーダーマーク)
UTF-8ファイルは先頭にBOM(EF BB BF)を含む場合があります。有効ですが、一部のXMLパーサーで問題を引き起こすことがあります。UTF-16ファイルはバイトオーダー(ビッグエンディアンまたはリトルエンディアン)を示すためにBOMが必要です。
ベストプラクティス
新しいXMLドキュメントには常にUTF-8を使用してください。普遍的なデフォルトであり、すべての現代パーサーでサポートされ、すべてのUnicode文字を効率的に処理します。
ユースケース
XMLエンコーディングの理解は、国際的なソースからのXMLファイルの処理、非UTF-8エンコーディングを使用するレガシーシステムの移行、複数言語の文字を含むXMLデータフィードの処理、CI/CDパイプラインやAPI統合でのエンコーディングエラーのデバッグに不可欠です。