XMLの文字エンコーディングはUTF-8とUTF-16が基本です。(わけモブ)(旧)主要記事メニュー(旧)主要記事メニューXMLの文字エンコーディングはUTF-8とUTF-16が基本です。混在問題に関する記事(リンクリスト)に戻る情報システムの設定ファイルや汎用的データファイル、そして他システム連携などに広く使われているデータファイル形式に「XML」というフォーマットがある。Language)である。W3CはWeb技術を使用する全ての規格の標準化に取り組んでおり、HTMLの規格もW3Cが定めている。Model)と言ったところだ。多くのITシステムはこのW3C規格に従って開発されている。Webの規格だが、業務系ITシステムでも設定ファイルや汎用的データファイル、他システム連携に使用するデータフォーマットの規格は世界標準規格のW3C規格を使用する。いうデータフォーマットである。定められており、W3C規格ではない。ついては後日記事に書く。規格は無料でWEB公開されており、誰でも読むことができる。(第二版)w4ard.eplusx.net規格の内容については公開されたXML仕様書を読めば良いので解説はしない。XMLの文字エンコーディングについてだけ解説したいと思う。目次XMLの文字エンコーディングの規格XMLは原則としてUTF-8かUTF-16で記載する他のエンコーディングはエンコーディング宣言が必須データ交換の世界ではUNICODEは必須であるXMLの文字エンコーディングの規格XMLはデータフォーマットだけではなく、そのデータで使用する文字エンコーディングの種類と使い方についても規則が定められている。W3C勧告においては次のように記載されている。「文字コード点をビットパターンにエンコードする機構は、実体によって異なっていても良い。[Unicode]のUTF-8エンコーディングとUTF-16エンコーディングを受け容れなければならない(must)。Entitiesで取り扱う。Entities一つのXML文書で使われる外部解析対象実体は、それぞれ異なるエンコーディングを文字に対して用いても良い。すべてのXMLプロセッサは、UTF-8エンコーディングやUTF-16エンコーディングで表された実体を、両方とも読み取れなければならない(must)。この仕様書で使われる用語"UTF-8"と"UTF-16"は、異なる名前を持つ文字エンコーディングを指したりはしない。そのエンコーディング方法やその名前がどんなにUTF-8やUTF-16に似ていてもである。SPACE文字(#xFEFF)の事)から始まらなければならない(must)。UTF-8でエンコードされた実体は、バイトオーダーマークから始まっても良い(may)。バイトオーダーマークはエンコーディングのシグネチャであり、そのXML文書のマークアップの一部でも文字データの一部でもない。XMLプロセッサは、この文字を、UTF-8でエンコードされた文書とUTF-16でエンコードされた文書を区別する為に使えなければならない(must)。「XMLプロセッサに絶対に要求されるのはUTF-8エンコーディングやUTF-16エンコーディングで表された実体を読み取れる事だけではあるが、他にも沢山のエンコーディングが世界各地で使われている事が知られており、XMLプロセッサがそれらのエンコーディングで表された実体をも読み取れる事が望まれるかも知れない。Declaration参照)から始まらなければならない(must)。エンコーディング宣言は次の通りである。テキスト宣言」と「エンコーディング宣言」の引用は省略し、こちらで解説する。引用した規格書(仕様書)を簡潔に解説する。(読めば分かる人も多いだろうが)XMLは原則としてUTF-8かUTF-16で記載するあくまで原則だが、文字エンコーディングを特に指定しないで、XMLを使用する場合はUTF-8かUTF-16の文字エンコーディングで記述するのが規則である。文字エンコーディング指定しないのなら、UTF-8かUTF-16である事が必須となる。UTF-8とUTF-16のXMLデータは両方読み取れなければならない。UTF-16を使用する場合は先頭にBOMを付ける事が必須である。UTF-8を使用する場合は、BOMを付けても付けなくても良い。規格書にはUTF-16のBOMとして「#xFEFF」を付ける事を義務づけているが、これはUTF-16BEのBOMである。ここだけ見ると「UTF-16BEを使わなければならないのか」と思うかも知れないが、最初に「文字コード点をビットパターンにエンコードする機構は、実体によって異なっていても良い。」と書かれているので、LEかBEかは特に定められてはいないと考える。UTF-16LEもUTF-16BEも、CPUレジスタに読み込まれると同じ値になる。UTF-16LEではメモリやファイルでのバイトの並び順が逆向きになるだけで、文字コード番号自体は同じである。UTF-16LEのBOM「#xFFFE」も、CPUレジスタに読み込まれると、UTF-16BEと同じ「#xFEFF」になる。よってUTF-16LEとUTF-16BEはどちらを使用しても良いし、両者はBOMで区別できる。使用する場合は、BOM有りでも無しでも、両方明確に許可されている。他のエンコーディングはエンコーディング宣言が必須UTF-8とUTF-16以外の文字エンコーディングを使用する場合は、XMLの最初の行にエンコーディング宣言を記述する事が義務づけられる。エンコーディング宣言はテキスト宣言の中に記述する。テキスト宣言とは<?xml>ダグの事で、ダグの中にXMLバージョンと文字エンコーディングを指定する。使用する場合のテキスト宣言は以下のようになる。encoding="Shift_JIS"?>テキスト宣言は必ず英数字で書かなければならない。プログラム的には先頭の<?xml>ダグだけASCIIコードで読み込み、encodingの値を取得して、文字エンコーディングを再指定してから、その後のXMLデータを読み込む事になる。UTF-8とUTF-16のXMLデータは両方読み取れなければならない。使用する事は許可されるが、UTF-8とUTF-16を読み取れなくても良いわけではない。BOM無しでの使用が認められるが、その場合はエンコーディング宣言しなければ使用している文字エンコーディングが識別できないので、エンコーディング宣言は必須となる。使用するケースが多いと思う。XMLなどのデータを扱っているのが現場の実状だろう。読み取れる事が必須となっている。これからは、海外の拠点とデータ連携する事も多くなるだろう。海外拠点とシステム連携できない。以前からこの問題を記事に書いているが、そろそろどこかのタイミングでUTF-8やUTF-16にシステム対応する事を検討しておいた方が良いと思う。その為のノウハウはこれまで記事に書いてきたはずである。ITエンジニアではない、業務担当者や経営者の皆さんにも、この課題は認識しておいて欲しい。UTF-8やUTF-16にシステム対応するには、それなりのコストとスケジュールが必要だ。システム担当者と相談ぐらいはしておいて欲しい。(わけモブ)関連記事システム開発Excelを活用したシステムについて思うところ(3)反Excel勢力文書作成の主流はクラウドツール私はこのブログを書くときEvernoteを使用している。以前は文書作成にテキストエディターを使用していたが、Evernoteに変えてから文書は全てこれで書くようになった。以下に文字コードを表す言葉して「文字コード」「エンコーディング」「キャラクターセット」という言葉が出てくるが、全て同じような物と認識して欲しい。以前、スタックについて非情技(非ITエンジニア)向けに解説記事を書いた。最初にお断りしておくがここで技術の話をするつもりはない。先日、Windows365がリリースされて私もいくつか記事を書いた。メリットとデメリットと考察。IT系ではない一般ユー...システム開発Windows365サブスクリプションのコスパを検証する先日、Windows365の特徴とメリットとデメリットについての記事を書いた。メリットとデメリットと考察。(わけモブ).メニュー(旧)主要記事メニューホーム検索トップサイドバータイトルとURLをコピーしました。