* いろいろな定義とバリエーション ** RFC による定義 - [6] [WEAK[2003-11-10 23:49:29 +00:00]] ''[[名無しさん]]'': ついに IETF Full Standard の [[RFC3629]] (= [[STD63]]) がでました。 ** Web UTF-8 [19] [[Web Applications 1.0]] は、「[DFN[[RUBYB[バイト列をUTF-8として誤り取り扱い付きで復号]@en[decode a byte string as UTF-8, with error handling]]]]」することについて規定しています。 これは、 [[UTF-8]] [[バイト列]]を[[文字列]]に[[復号]]するにあたって不正な[[バイト列]]を適宜 [CODE(char)[[[U+FFFD]]]] に置き換える方法を定めたものです。 *** 仕様書 - [18] [[Web Applications 1.0]] *** 歴史 [17] [CITE@en[Web Applications 1.0 r5530 Tighten up UTF-8 error handling definitions Fixing http://www.w3.org/Bugs/Public/show_bug.cgi?id=9663]] ( ([TIME[2010-09-29 04:16:00 +09:00]] 版)) ** Perl の UTF-8 [12] [[Perl]] の [CODE(perl)@en[[[Encode]]]] [[モジュール]]には「[[utf8]]」と「[[utf-8]]」 があります。「[[utf8]]」は [[UTF-8]] っぽい[[符号化方式]]を使った [[Perl]] の[[内部コード]]、「[[utf-8]]」は [[Unicode]] の [[UTF-8]] です。 詳しくは [[utf8 (Perl)]] の項をご覧ください。 ** Java の UTF [1] [[Java]] が実装している UTF-8 の変種は、 U+0000 を表現するために 0xC0 0x80 を (0x00 の代わりに) 使います。 (0x00 は Java では文字列の終端を表し、文字列内には入れられません。) - [4] このような、「長さが最小ではない表現」は、 UTF-8 では禁止されています。[WEAK[もっとも、各規格は当初そのことを忘れていました。設計者は最初からそのことに注意していたらしいですが、気が抜けていたとかなんとか。]] - [5] 実際には巷の UTF-8 の decoder は最短じゃない表現を「意図どおりに」解読してしまうことがありますが、それは禁止されています。 [9] [Q[Java [RUBYB[修正] [modified]] UTF-8]] (昔は Java の世界で [Q[UTF-8]] と呼ばれていたもの。) は >>1 に加えて [[CESU-8]] らしいです。 ''Supplementary Characters in the Java Platform'' [10] ''JNI Types and Data Structures'' * BOM との関係 [2] ''[CODE(charset)[UTF-8]] の [[BOM]] は必須ではありません''。 詳しくは [[BOM]>>9] を参照して下さい。 BOM 必須説は、そういうことにしたい人達が勝手に流した風説です。 * 非文字との関係 - [3] [[Unicode]] 3.0 以降では S-area の符号位置 (の UTF-8 表現) は禁止されています。他方、 [CODE[U+FFFF]] のような non-character (の UTF-8 表現) は禁止されていません。 non character は情報交換を目的としたものではありませんから情報交換用で紛れ込んでいたなら間違いですが、内部処理に使うことが出来るものですから、 [[UTF]] で禁止したら使う意味が無くなるということらしいです。 * Charset 名 [13] [[IANA]] に登録された [[charset]] 名は [DFN[[CODE(charset)@en[[[utf-8]]]]]] です。 [14] [[HTTP]] では、たまに誤って [[charset]] 名として [CODE(charset)@en[[[utf8]]]] が用いられることがあります。 ** Unicode の版との関係 @@ [15] [CODE(charset)@en[[[unicode-1-1-utf-8]]]] は・・・ * 実装 ** Emacs で UTF-8 [11] [[Emacs]] で [[UTF-8]] な[[ファイル]]を開くとなぜか[[漢字]]だけ全部化ける ([[仮名]]とかは化けない) という時は [[.emacs]] とかにこう書くと直るかもよ: [PRE(example code)[ (prefer-coding-system 'utf-8-unix) ]PRE] * メモ [16] [CITE[Official Google Blog: Unicode nearing 50% of the web]] ([TIME[2010-01-29 05:36:25 +09:00]] 版) [20] [CITE@en[Web Applications 1.0 r5940 typo in the allowed UTF-8 ranges]] ( ([TIME[2011-03-04 11:06:00 +09:00]] 版)) [21] [CITE@en[Web Applications 1.0 r5942 Fix the UTF-8 decoder error handling to handle a few errors I'd missed, including in particular surrogate halves. This may be a mistake; if I'm forgetting something please let me know so I can fix it. (e.g. did we decide not to catch surrogates or something?)]] ( ([TIME[2011-03-04 11:56:00 +09:00]] 版)) [22] [CITE@en[RFC 6120 - Extensible Messaging and Presence Protocol (XMPP): Core]] ( ([TIME[2011-03-31 08:23:45 +09:00]] 版)) [23] [CITE[「私のために争わないで」文字コードのUTF8さん、自殺 : bogusnews]] ( ([TIME[2012-04-01 10:06:51 +09:00]] 版))