文字コードの識別

文字コードの識別

[4] 文字コード識別する名前の体系には色々なものがあります。

識別子の体系

[24] 各種のプロトコル文書形式プログラミング言語文字コードの変換の実装などでそれぞれ文字コード識別子の体系を定めています。

[1] 文字コード名の体系
[27] この他に、 UTF-8 であることのみを示せるプロトコル要素などもあったりします。

[25] 歴史的に見ればインターネットでは IANA charset の影響力がかなり強いものの、 それ単独で用いるほどカバー範囲と定義の厳密性はなく、 各種の実装はそれを取り込みつつ各分野の従来の慣習と統合する形を採っており、 似て非なる体系が大量に生じています。


[20] 数値符号を除けば、ASCII文字で構成されるものが多いです。

[21] 稀に非ASCII文字が使われるものもあります。 文字コードの指定がなされる場面で非ASCII文字は安全に使えないことが多いので、 矛盾した状況にも思えますが、稀とはいえ現に存在します。 とはいえ多くは仕様上認められていない利用方法です。

[22] ASCII文字の諸記号は、どれを使えるか制限されていることもありますが、 守られていない場合もあります。 どれが使われるかは慣習によるところが大きいですが、 一貫しないものや体系によって違うものも多く、 統一的な基準は無いと考えて構いません。 無視したり統一したりする実装もありますが、 それによって名前が衝突する場合もあります。

[23] 大文字と小文字は、区別しないことが多いです。 正規形が定義されていることもありますが、まず意味がないと考えて間違いありません。 実態としても様々な形で使われており、 文脈と個別の文字コード次第でどの書き方が多いという傾向は多少あれども、 強い慣習といえるものはありません。


[16] 似た構造の文字コードに統一的な名称を与えようとした試みもありますが、 他の色々な名前が混在する中で統一的な命名規則を徹底するのは難しいようです。

[17] charset-editioncharset-extension のように識別子を多次元化する試みもありましたが、成功していません。


[5] 多くの文字コードは正式な唯一の名前が無かったり、 機械的な識別子としての利用に適した名前では無かったり、 人間向けと機械向けで違う名前を用意していたり、 識別子の体系によって違う名前を与えられていたりします。

[7] また、識別子の体系の管理が破綻していて、 正式な定義と実際に使われるものと違いが生じていたり、 正式な定義がないまま事実上の標準となるものが使われていたりすることもままあります。

[8] 他の識別子の体系の識別子が移入されて使われることも多いのですが、 丸々同じものを採用せずにつまみ食い + 独自分、というパターンが非常に多いので、 利用者の正確な理解を妨げています。

[6] たまに識別子に含まれる些細な記号空白の違いで「この文字コードをこれこれというのは誤りで、 これこれというのが正しい」と主張する人が出現しますが、 そのような主張は正しくないことが多いです。 「これこれの場面ではこれこれの名前が正しい」 のような限定的な条件でしか成立しないことを、勝手に拡大解釈するタイプです。

[10] より深刻な問題として、識別子が文字コード体系の細かなバリエーションのどれを指しているのか明らかでない場合や、 正式な定義と世間の実態が乖離している場合が多くあります。 識別子の体系が細かなバリエーションを区別しているのに、 実態としては混用されているような場合もあります。

[9] こうした問題は解決しないまま UTF-8 への移行が進み、表立ってトラブルにつながることが少なくなったのはいいことですが、 一方で問題の発生数が減って見えにくくなったり、 古いデータやプログラムの理解に問題があるのを修正されないままとなっていたり、 トラブル解決のための情報が減少していたりと、 狭く深い問題に変化しつつあります。

[15] フォント依存符号化のようにフォント名が事実上の文字コードの識別子となる場合もあります。

識別される「文字コード」

[12] BOM 有無など出力時の動作オプションに当たるものが文字コード名に取り込まれていることがあります。

[11] 狭義の文字コードの体系の他に、改行文字の種別や Unicode正規化の適用などの動作オプション文字コード名に取り込まれていることがあります。

[13] Base64 など内容転送符号化符号化語 escape のような文書形式プロトコルの構文、あるいはそれと狭義の文字コードとの組合せも 「文字コード」として名前が付与されていることがあります。

[28] 照合順序との組合せに名前が付与されていることがあります。

[14] 文字コードの自動判定も1つの「文字コード」として名前が与えられていることがあります。 判定法の違いにもそれぞれ名前が与えられていることがあります。

[26] 単独で用いられる文字コードの他、エスケープシーケンスで切り替えられる符号化文字集合フォントの記述に用いられる符号化など、 狭義の文字コードの体系といえるものの中にも性質が異なるものが混在しており、 識別子の体系はそれらを区別したりしなかったりしています。

[18] x-user-defined, replacement のように特殊な「文字コード」もあります。

[19] 特殊な「文字コード」は特定の場面で認識され、特定の場面では認識されないなど、 扱いが通常の文字コードと違うことがよくあります。

関連

文字コードの変換

メモ

[2] GNU gettext - Bugs: bug #50357, xgettext doesn't recognise... [Savannah] (Copyright 2016 Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved.著, ) https://savannah.gnu.org/bugs/?50357

[3] PEP 263 -- Defining Python Source Code Encodings | Python.org () https://www.python.org/dev/peps/pep-0263/