UTF-8
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/01/22 22:37 UTC 版)
特徴
利点
- ASCII文字コードのテキストを処理するソフトウェアの多くがそのまま使える[8]。
- バイトストリーム中の任意の位置から、その文字、前の文字、あるいは次の文字の先頭バイトを容易に判定することができる。
- 文字列の検索を単なるバイト列の検索として行っても、文字境界と異なる個所でマッチしてしまうことがない。たとえばShift_JISで「¥」(0x5C) を検索すると「表」(0x95 0x5C) の2バイト目にマッチしたり、EUC-JPで「海」(0xB3 0xA4) を検索すると「ここ」(0xA4 0xB3 0xA4 0xB3) にマッチしたりするのと同様のことが起きない。このため、マルチバイト文字を意識せず、ISO 8859-1などの8ビット文字向けに作られた膨大なプログラム資産を、比較的少ない修正で再利用できる。
- ただし、他のUnicodeの符号化と同様に、単にバイト列の比較では文字列が同一か判断できない場合がある。詳細は、Unicodeの等価性および正規化を参照のこと。
- UTF-16やUTF-32と異なり、バイト単位の入出力を行うため、バイト順の影響がない。
- 21ビットまで表現できるため、サロゲートペアを使用する必要がない。
- ASCII文字が主体の文書であれば、ほとんどデータサイズを増やさずにUnicodeのメリットを享受できる。UTF-16やUTF-32では、データサイズはほぼ2倍、4倍となる。
- 複数のUTF-8文字列を、単なる符号なし8ビット整数の配列とみなして辞書順ソートした結果は、Unicodeの符号位置の辞書順のソート結果(すなわちUTF-32に変換した後にソートした結果)と等しくなる。これに対して、サロゲートペアを含むUTF-16文字列を符号なし16ビット整数の配列とみなしてソートした結果は、Unicodeの符号位置の辞書順のソート結果と異なりうる。
欠点
- UTF-8による符号化では、漢字や仮名などの表現に3バイトを要する。このように、東アジアの従来文字コードではマルチバイト符号を用いて1文字2バイトで表現されていたデータが、1.5倍かそれ以上のサイズとなる。同様に、ISO/IEC 8859-1では1バイトで表現できた非ASCIIのラテン文字(ウムラウト付きの文字など)も2バイトとなるし、その他のISO/IEC 8859シリーズに属する文字符号ではデータ量がさらに増大しうる。
- 最短ではない符号やサロゲートペアなど、UTF-8の規格外だがチェックを行わないプログラムでは一見正常に扱われるバイト列が存在する。これらのバイト列を入力として受け入れてしまうと、プログラムが予期しない範囲のデータを生成するため、セキュリティ上の脅威となりうる[9]。
- ^ RFC 3629 UTF-8, a transformation format of ISO 10646
- ^ RFC 3629 Page-3
- ^ Rob Pike's UTF-8 history
- ^ ISO/IEC 10646:2003 Information technology -- Universal Multiple-Octet Coded Character Set (UCS)
- ^ RFC 2279 UTF-8, a transformation format of ISO 10646
- ^ The Unicode Standard, Version 5.2
- ^ RFC 3629 UTF-8, a transformation format of ISO 10646
- ^ ただし、バイト順マーク (BOM) が付加されている場合や、テキストを7ビットで処理するソフトウェア、内部的に最上位ビットを使用しているソフトウェアなど、使えないものも存在する
- ^ RFC 3629, pp.9f.
- ^ “10.1.10.6 The utf8mb4 Character Set (4-Byte UTF-8 Unicode Encoding)”. dev.mysql.com. MySQL 5.5 Reference Manual. Oracle. 2015年12月1日02:10:55時点のオリジナルよりアーカイブ。2015年12月11日閲覧。
- ^ Windowsにおける有名なワームであるNimdaウイルスは、IISにおけるUTF-8の脆弱性をもちいたものである。(はせがわようすけ 2009)
- ^ Mark Davis. “Forms of Unicode” (英語). IBM. 2005年5月6日時点のオリジナルよりアーカイブ。2013年9月18日閲覧。
- ^ このため、UTF-8という呼び名を使っていれば情報交換の相手が文書先頭にこのシーケンスがあると見なすと期待すべきではないし、また、UTF-8Nという呼び名は情報交換の際に用いるべきではない。
- ^ TeraPad、EmEditor、MIFESのようにBOMを付加するかどうかを選択できるものもある。
- ^ /source-charset (Set Source Character Set) | Microsoft Docs
- ^ “「メモ帳」に多数の改善、BOMなしUTF-8がデフォルト保存形式に ~「Windows 10 19H1」”. Impress. 2023年1月26日閲覧。
- ^ RFC 3629 6. Byte order mark (BOM)
- UTF-8のページへのリンク