UTF-8 とは?ページ内リンク ↓ウィキペディア(Wikipedia)記事 ↓Yahoo!知恵袋UTF-8(旧UTF-2)はISO/IEC 10646(UCS)とUnicodeで使える符号化方式。 正式名称は、ISO/IEC 10646では'UCS Transformation Format 8'、Unicodeでは'Unicode Translation Format-8'という。 両者はISO/IEC 10646とUnicodeのコード重複範囲で互換性がある。 2バイト目以降に'/'などのコードが現れないように工夫されていることから、'UTF-FSS'(File System Safe)ともいわれる。 RFCにも仕様がある。 出典: 『ウィキペディア(Wikipedia)』 UTF-8 出典: 『はてなダイアリー』 関連商品
X/OPEN Company /
最安値(新品): ¥ 3,599
|
| Unicode |
|---|
| 符号化方式 |
| UCS |
| マッピング |
| 書字方向 |
| BOM |
| 漢字統合 |
| UnicodeとHTML |
| Unicodeと電子メール |
| Unicodeフォント |
UTF-8(旧UTF-2)はISO/IEC 10646(UCS)とUnicodeで使える符号化方式。 正式名称は、ISO/IEC 10646では'UCS Transformation Format 8'、Unicodeでは'Unicode Translation Format-8'という。 両者はISO/IEC 10646とUnicodeのコード重複範囲で互換性がある。 2バイト目以降に'/'などのコードが現れないように工夫されていることから、'UTF-FSS'(File System Safe)ともいわれる。 RFCにも仕様がある。
データ交換方式、ファイル形式としては一般的にUTF-8が使われる傾向がある。 Linux等では、OSの標準文字エンコードとして使用される例も増えている。
当初は、Plan 9で用いるエンコードとしてベル研究所で考案された。
目次 |
ASCII文字と互換性を持たせるために、ASCIIと同じ部分は1バイト、その他の部分を2~6バイトで符号化する。4バイトのシーケンスでは21bit(0x1FFFFF)まで表現することができるが、Unicodeの範囲外となる17面以降を表すもの(U+10FFFFより大きなもの)は受け付けない。また5~6バイトの表現は、ISO/IEC 10646による定義[1]とIETFによるかつての定義[2]で、Unicodeの範囲外を符号化するためにのみ使用するが、Unicodeによる定義[3]とIETFによる最新の定義[4]では、5~6バイトの表現は不正なシーケンスである。
ビットパターンは以下のようになっている。
0xxxxxxx (00-7f) 7bit 110yyyyx 10xxxxxx (c2-df)(80-bf) 11bit 1110yyyy 10yxxxxx 10xxxxxx (e0-ef)(80-bf)(80-bf) 16bit 11110yyy 10yyxxxx 10xxxxxx 10xxxxxx (f0-f7)(80-bf)(80-bf)(80-bf) 21bit 111110yy 10yyyxxx 10xxxxxx 10xxxxxx 10xxxxxx (f8-fb)(80-bf)(80-bf)(80-bf)(80-bf) 26bit 1111110y 10yyyyxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx (fc-fd)(80-bf)(80-bf)(80-bf)(80-bf)(80-bf) 31bit
Unicodeのコードポイントを2進表記したものを、上のビットパターンのx, yに右詰めに格納する。 最短のバイト数で符号化するため、yの部分には最低1回は1が出現する。 符号化されたバイト列は、バイトオーダーに関わらず左から順に出力する。 これにより4バイトで21bit、6バイトで31bitまで表現することができる。
1バイト目の上位ビットの1の個数でその文字のバイト数が判るようになっている。また、2バイト目以降は10で始まり、1バイト目と2バイト目以降では値の範囲が重ならないので、文字境界を確実に判定できる。
7バイト以上の文字は規定されないため、fe, ffは使用されない。このため、バイトオーダーマーク(BOM)にfeとffを使用するUTF-16が、UTF-8と混同されることはない。
UTF-16のサロゲートペアで表されるBMP外の文字をUTF-8に変換するときは、まず4バイトのサロゲートペア(前半0xD800〜0xDBFF, 後半0xDC00〜0xDFFF)をU+10000からU+10FFFFまでの値にデコードしてからUTF-8に符号化しなければならない。サロゲートペアに使われるU+D800からU+DFFFまでの範囲を、UTF-8でそのまま符号化することは禁止されており、不正なシーケンスとみなされる。
サロゲートペアを残したままUTF-8と同等の符号化を行う規格は、CESU-8(Compatibility Encoding Scheme for UTF-16: 8-Bit)として別途定義されている。 これは、Oracle Databaseのバージョン8以前において、UTF-8文字は3バイトまでしか扱えなかったために便宜的に定義されている。4バイトのサロゲートペアは使用せず、代わりに6バイトのサロゲートペア(前半がED A0 80〜ED AF BF、後半が ED B0 80〜ED BF BF)で表現される。 なお、現在のOracle Databaseでは、CESU-8を「UTF8」として、「普通のUTF-8」を「AL32UTF8」として扱っているため注意を要する。
また、Javaの一部の内部実装で用いられているModified UTF-8も、サロゲートペアをそのまま残す仕様となっている。 但し、NULL文字をC0 80とエンコードする(これもUTF-8規格外)点で、CESU-8とも異なる実装となっている。
UTF-8のエンコード体系には冗長性があり、同じ文字を符号化するのに複数の表現が考えられる。かつてはそのような表現も許容されていたが、ディレクトリトラバーサルなどの対策として行われる文字列検査を冗長な表現によりすり抜ける手法が知られるようになったため、現在の仕様では最も短いバイト数による表現以外は不正なUTF-8シーケンスとみなさなければならない。
また、ISO/IEC 10646の定義が5バイト以上の表現を許容していることにより、注意深さの足りない実装でエンコード時にバッファオーバーフローが発生する可能性も指摘されている。
UTF-8で符号されたテキストデータはエンディアンに関わらず同じ内容になるので、UTF-8で符号化されていることが確定しているのならバイトオーダーマーク (英: Byte Order Mark。以下BOM) を付加する必要はない。しかし、一部のテキスト処理アプリケーション (エディタなど) では、作成したテキストデータの先頭にBOMを付加する (付加するかどうかを選択できるものもある)。付加する場合は、EF BB BF (16進。U+FEFFのUTF-8での表現) をデータの先頭に付加する。なお、BOMありの方をUTF-8、なしの方をUTF-8Nと呼ぶこともあるが、このような呼び分けは日本以外ではほとんど知られておらず、また公的規格などによる裏付けもない。このため、UTF-8という呼び名を使っていれば情報交換の相手が文書先頭にBOMがあると見なすと期待すべきではないし、いっぽう、UTF-8Nという呼び名は情報交換の際に用いるべきではない。
BOMを付加する目的は、その文書がUTF-8であることを確実に認識できるようにするためだと考えられる。 一方で、UTF-8のBOMを認識しない(単に8ビットスルーであるというだけの、正式にはUTF-8に対応していない)プログラムでは、BOMが余分なデータとみなされて問題となる場合もある。例えば、UNIX系OSにおける実行可能スクリプトは、ファイル先頭が「#!」から始まるとき、それに続く文字列をインタプリタのコマンドとして認識するが、現状の多くのシステムでは、BOMが存在するとこの機能が働かず実行できない。ただし、これはテキストエディタで編集可能とはいえ、あくまでも実行可能な“バイナリ形式”での事例であり、テキストファイルにおけるBOMの取り扱いとは別の問題である。
逆にBOMがないとUTF-8と認識できないプログラムも存在する (とくにASCII部以外の文字が少ない場合に誤認することが多い)。
プロトコルが常にUTF-8である事を強制しているものである場合はBOMを禁止するべきで、この場合ファイル先頭のBOMは "ZERO WIDTH NO-BREAK SPACE" と見なされる。逆にプロトコルがそれを保証しない場合BOMは禁止されずファイル先頭のそれはBOMと見なされる[6]。
一般適にUTF-8と呼ばれる場合は、ほとんどの場合NFCで正規化されたものを表す。 一方、Mac OS Xで使用されるファイルシステムでは、ファイル名をNFDにより正規化されたUTF-8で扱う。 このため、Mac OS Xに付属するiconvでは、NFDで正規化されたUTF-8をUTF-8-MACとして扱うことができる。
なお、Mac OS Xのシステムコールでは、ファイルにアクセスする際、通常のUTF-8で指定しても内部でUTF-8-MACに変換されるため、ユーザーやプログラマはこれを意識する必要は無い。 しかし、ファイルの一覧などを取得した場合、取得されるファイル名はUTF-8-MACとなる。 これで得られたファイル名を、そのまま他のシステムにコピーすると、一般的な方法ではアクセスできないファイルが作成されてしまう恐れがあるため、十分な配慮が必要となる。
PageRank5以上の相互リンク
・相互リンクスクエア
(PageRank 5)
・相互リンク インプロス
(PageRank 5)
→便利!NINJA TOOLS
→FC2検索
用語
Wikipedia
YouTube
![]() |
![]() |
![]() |
![]() |
![]() |
|
![]() |
![]() |