文字コード

文字とビット列の対応関係を定めた規則体系。文字集合 (どの文字を扱うか) と符号化方式 (どうバイト列に変換するか) の 2 層で構成される。

文字コード (character encoding) は、コンピュータが文字を扱うための根幹技術です。人間が読む「A」や「あ」を、コンピュータが処理できる数値に変換する規則を定めています。この変換規則がなければ、テキストの保存も送信も表示もできません。

文字コードは 2 つの層に分けて理解すると明快です。第一層は「文字集合」(character set) で、どの文字を扱うかを定義します。ASCII は 128 文字、JIS X 0208 は約 6,879 文字、Unicode は 15 万文字以上をカバーします。第二層は「符号化方式」(encoding scheme) で、文字集合の各文字をどのようなバイト列で表現するかを定めます。同じ Unicode という文字集合に対して、UTF-8、UTF-16、UTF-32 という異なる符号化方式が存在するのはこのためです。

日本語の文字コードには複雑な歴史があります。1978 年に JIS C 6226 (後の JIS X 0208) が制定され、これを基に Shift_JIS (Microsoft が PC 向けに設計)、EUC-JP (UNIX 系で普及)、ISO-2022-JP (電子メール用) が生まれました。3 つの符号化方式が同じ文字集合を異なるバイト列で表現するため、相互変換の際に文字化けが頻発しました。

現在は Unicode + UTF-8 への統一が進んでいます。UTF-8 は ASCII と完全な後方互換性を持ち、英語テキストは 1 バイト/文字、日本語は 3 バイト/文字で表現します。この可変長設計により、ASCII 圏のシステムとの互換性を保ちながら世界中の文字を扱えます。ウェブ、データベース、プログラミング言語のデフォルトエンコーディングとして UTF-8 が採用されており、新規開発で UTF-8 以外を選ぶ理由はほぼありません。

文字数カウントにおいて文字コードの理解は必須です。同じ「あ」でも UTF-8 では 3 バイト、Shift_JIS では 2 バイト、UTF-32 では 4 バイトです。「文字数」と「バイト数」が一致するのは ASCII の範囲内だけであり、日本語テキストでは常に両者が異なります。データベースの VARCHAR(255) が「255 文字」なのか「255 バイト」なのかは文字コードの設定次第で変わるため、仕様を正確に把握しないとデータの切り詰めが発生します。

実務上の注意点として、レガシーシステムとの連携では Shift_JIS や EUC-JP への変換が必要になる場面がまだあります。この際、Unicode にあって Shift_JIS にない文字 (例: 一部の絵文字、CJK 統合漢字拡張 B 以降の漢字) は変換できず、「?」や「〓」に置き換わります。文字コード変換は情報の損失を伴う可能性がある不可逆な操作であることを認識しておく必要があります。

この記事を共有