スポンサーリンク

【応用情報技術者試験】文字コード

定番(まず覚える)

  • Unicode:文字コードの規格の名称。あらゆる国の文字コードを格納できる
  • UCS-4:Unicodeとほぼ互換
  • UCS-2:UCS-4の一部分。65,535文字を表現
  • UTF:UCS-4(UCS-2)、Unicodeをバイト列で表現する方法。Unicodeでは “Unicode Transformation Format”、ISO/IEC 10646では “UCS Transformation Format”の略
  • BOM (Byte Order Mark):この文書がビッグエンディアンかリトルエンディアンかを示すファイル先頭に付ける数バイトのマーク。「ボム」と読むみたい
  • UTF-8:1~4バイトの可変長で、先頭1~5ビットがバイト数を示す。ビッグエンディアン一択らしいのでBOMは付けないのが普通だが、BOMを付けても良い事になっている
  • UTF-16:2または4バイトの可変長。BOM無しはビッグエンディアン、BOMで指定があればそれに従う
  • UTF-32:4バイトの固定長

基本的には、UTF-8かUTF-16で全言語まかなえる。UTF-32は固定長がありがたい環境向け。
UTF-8は、ASCIIコード付近のバイト数が少なく、英字が多いなら総バイト数が小さくなる。
UTF-16は、日本語が3バイトらしく、日本語が多いなら総バイト数が小さくなる。

エンディアンとは
コンピュータのメモリにデータを格納する際のバイトの順序を定義する方式です。
ビッグエンディアンとリトルエンディアンの2種類があり、それぞれデータの最上位バイト
(ビッグエンディアン)または最下位バイト(リトルエンディアン)から順に格納します。

呼び方の変種や亜種

UTF-8N:後述
UTF-16LE:UTF-16のリトルエンディアンのこと
UTF-16BE:UTF-16のビッグエンディアンのこと
UTF-7:UTF-16をBASE64エンコード。メール関係の互換用らしい?
ISO/IEC 10646:Unicodeのほぼ互換規格だが、文字範囲が広いため、この規格をUTF-8で表現すると最大6バイトになる
UTF-8 mb4:MySQLは、UTF-8は3バイトまでの対応だったらしく、4バイト対応を明記したもの
CESU8:UTF-8の亜種。Oracle独自

ちなみにMicrosoftは、以前(Win10 1903あたり?)まで以下のように表記していた模様。
・「UTF-8(BOM有り)」の事を「UTF-8」
・「UTF-8(BOM無し)」の事を「UTF-8N」
・「UTF-16LE」の事を「Unicode」
・「UTF-16BE」の事を「Unicode big endian」
・「BOM」の事を「シグネチャ」

Web系以外でも、UTF-8、UTF-16LE辺りは、触れる機会多いのではないかと。

それぞれのプラットフォームでの標準

Windows:UTF-8 (BOM有り)、PowerShellは UTF-16LE (バッチファイルは Shift-JIS)
Linux:UTF-8 (BOM無し)
Mac:UTF-8 (BOM無し)

あとついでに、改行コードにも注意です。
Windows:CR+LF
Linux:LF
Mac:CR

Linuxのシェルスクリプトで、CRLFのファイルを実行しようとすると、行末に^Mって文字が入ってエラーが出たり、予期せぬバグの元になります。

コメント

タイトルとURLをコピーしました