[34] UTF-8 は、世界中で広く用いられており、 Linux や Web では原則として用いられている標準的な文字コードです。
[44] Unicode は、色々な文字に符号を与えています。 その符号をどのように表現するかは選択の余地があり、 歴史的に幾つかの方法が用いられました。その中で現在最も広く用いられているのが UTF-8 です。 UTF-8 は文字の符号を一定の規則で求められる1-4個のバイトの列として表すものです。
[45] 文字「a
」 (LATIN SMALL LETTER A
) は
Unicode で U+0061
という符号位置が割り当てられています。
これは UTF-8 ではバイト列 0x61
によって表されます。
[46] 文字「字
」 (CJK UNIFIED IDEOGRAPH-5B57
) は
Unicode で U+5B57
という符号位置が割り当てられています。
これは UTF-8 ではバイト列 0xE5 0xAD 0x97
によって表されます。
[38] ASCII互換符号化です。
[39] 0x00
-0x7F
は常に
U+0000
-U+007F
を表します。
[40] U+0000
-U+10FFFF
のすべての符号位置を符号化できます。
[48] すべての符号位置に対応するバイト列が一意に定まります。
[49] 文字列の部分一致と文字列に対応するバイト列の部分一致の結果が等しくなります。
[50] 文字列の符号位置による整列と文字列に対応するバイト列の整列の結果が等しくなります。
[2] UTF-8
の BOM は必須ではありません。
詳しくは BOM (>>9) を参照して下さい。 BOM
必須説は、そういうことにしたい人達が勝手に流した風説です。
[8] BOM を使うと UTF-8 の重要な性質の1つである ASCII 互換性が失われます。 多くの場合 BOM を使うのは適切ではないと考えられています。
[13] IANA に登録された charset 名は utf-8
です。
[14] HTTP では、たまに誤って charset 名として utf8
が用いられることがあります。
[42] XML文書が <meta charset>
を含む場合、その値は
UTF-8
(ASCII大文字・小文字不区別) でなければなりません。
従って当該文書の文字符号化は、 UTF-8 でなければなりません。
[108] UTF-8符号化は、 符号位置ストリームストリームについて、次のようにします >>85。
[113] 次の場面で使われます。
[111] TextEncoder
の encode
メソッドは、UTF-8符号化を使っていませんが、実質的に等価です。
[110] 他に、符号化操作が UTF-8 について実行されることもあります。
[140] なお、仕様書としてUTF-8符号化を使っていても、実質的には同型符号化となる場合があります。
[95] BOM は生成されません。文字列の先頭に ZWNBSP
がある場合、
復号やUTF-8復号は BOM とみなすので、
文字列に戻した時に ZWNBSP
が失われてしまいます。
[86] UTF-8復号は、
バイトストリームストリームを次のようにします >>85。
[96] BOMなしUTF-8復号は、
バイトストリームストリームを次のようにします >>85。
[101] BOMなしUTF-8復号または失敗は、
バイトストリームストリームを次のようにします >>85。
[112] これらの操作は同期的に処理される手続きのような形で仕様書では記述されていますが、 実際には、呼び出される文脈次第で、入力ストリームを読みながら、読んだところから順に復号器に与え、 出力ストリームに書き込んでいくことが想定されているようです。
[114] これらの操作の呼び出される場面については、復号を参照。
[117] UTF-8 の復号器オブジェクトは、次の状態を持ちます
>>116。
[118] UTF-8 復号器オブジェクト復号器の取扱器は、
ストリームと字句について、次のようにします >>116。
[127] これより、不正なバイト列、U-00110000
以上、
サロゲートは、構成する各バイトが U+FFFD
に置き換えられます。
UTF-8
[54] 基本認証やダイジェスト認証の charset=""
引数には値
UTF-8
を指定できます >>53, >>58, >>69。
[55] これは、文字列を NFC で正規化してから、 RFC 3629 UTF-8 でバイト列に変換することをいいます >>53, >>69。
[56] 受信者は、利用者識別子においては、
RFC 7613 UsernameCasePreserved
プロファイルから
:
を除くすべての文字に対応しなければなりません >>53, >>69。
[57] 受信者は、合言葉においては、
RFC 7613 OpaqueString
プロファイルからすべての文字に対応しなければなりません >>53, >>69。
401
エラーにしますから、
サーバーが HTTP レベルでこれらのプロファイルの文字に対応しているかどうかは、
外部から観測できないように思えます。
プロファイルに従い写像や正規化を適用することを指しているのだとしたら観測可能ですが、
そんな実装はあるのでしょうか。。。[203] wg20-n193-fss-utf.pdf, , https://www.unicode.org/L2/Historical/wg20-n193-fss-utf.pdf
[36] ISO/IEC 10646 では符号位置が U-7FFFFFFF
まであり、そのすべてが UTF-8 でも表現できます。UTF-8
における1文字は最大6バイトで表現されます。
[196] RFC 2044 - UTF-8, a transformation format of Unicode and ISO 10646, , https://tools.ietf.org/html/rfc2044
[197] RFC 2279 - UTF-8, a transformation format of ISO 10646, , https://tools.ietf.org/html/rfc2279
[41] Net-Unicode はそれに制御文字の用法や正規化に関する規定を加えたプロファイルです。
[199] RFC 3629 を参照: IETF 版 JSON, SASL ANONYMOUS
[200]
JOSE は RFC 3629 を参照し、
UTF8(STRING)
という関数風の表記法で仕様を記述しています。
>>191, >>195, >>202, >>187
UTF8(STRING) denotes the octets of the UTF-8 [RFC3629] representation
of STRING, where STRING is a sequence of zero or more Unicode
[UNICODE] characters.
UTF8(STRING) denotes the octets of the UTF-8 [RFC3629] representation
of STRING, where STRING is a sequence of zero or more Unicode
[UNICODE] characters.
ASCII(STRING)
があります。[7] CESU-8 は U+10000
以上の符号位置を UTF-16
同様のサロゲートペアによって表現するものです。
[19] Web Applications 1.0 は、「バイト列をUTF-8として誤り取り扱い付きで復号」することについて規定しています。
これは、 UTF-8 バイト列を文字列に復号するにあたって不正なバイト列を適宜
U+FFFD
に置き換える方法を定めたものです。
[17] Web Applications 1.0 r5530 Tighten up UTF-8 error handling definitions Fixing http://www.w3.org/Bugs/Public/show_bug.cgi?id=9663 ( ( 版)) http://html5.org/tools/web-apps-tracker?from=5529&to=5530
[47] これは後の Encoding Standard の定義につながりました。現在の HTML Standard は Encoding Standard を参照しています。
[11] Emacs で UTF-8 なファイルを開くとなぜか漢字だけ全部化ける (仮名とかは化けない) という時は .emacs とかにこう書くと直るかもよ:
(prefer-coding-system 'utf-8-unix)
[12] Perl の Encode
モジュールには「utf8」と「utf-8」
があります。「utf8」は UTF-8 っぽい符号化方式を使った Perl
の内部コード、「utf-8」は Unicode の UTF-8 です。
use utf8
utf8
符号化[66] Perl の Encode
モジュールは文字符号化の名前として
「utf8
」 と 「utf-8
」に対応しています。
前者は Perl の文字列の内部符号化方式としての UTF-8
(のバイト文字列としての表現)、
後者は Unicode の文字符号化方式である UTF-8 を表しています。
:utf8
PerlIO 層[67] perldoc PerlIO にもちゃんと書いてありましたが、
PerlIO 層 :utf8
を使った入力は不正な入力も黙って受け入れます。
読み込むファイルが UTF-8 として不正なバイト列であったとしても、警告も何も無しで、
黙って utf8 旗を立てた SV にするみたいです。なので、入力が不正なバイト列である可能性がある場合、
:encoding(utf8)
を使う必要があります。
こちらは不正なバイト列を \xHH
に置き換えるようです。
おそらく :utf8
の方が早いのでしょうが、もし不正なバイト列が混入していた場合、
読み込みの時点では何も起こらず、その後読み込んだ文字列に対して何らかの操作を行おうとした時点で
Malformed UTF-8 character (fatal)
というエラーが出ますので、デバッグが難しくなるかもしれません。
[68] Perl, utf8 フラグ, ハッシュ, リテラル, => - 冬通りに消え行く制服ガールは、夢物語にリアルを求めない。 - subtech ( 版) https://subtech.g.hatena.ne.jp/cho45/20100323/1269329227
[1] Java が実装している UTF-8 の変種は、 U+0000 を表現するために 0xC0 0x80 を (0x00 の代わりに) 使います。 (0x00 は Java では文字列の終端を表し、文字列内には入れられません。)
[9]
Java 修正 UTF-8
(昔は Java の世界で UTF-8
と呼ばれていたもの。) は >>1 に加えて CESU-8 らしいです。
Supplementary Characters in the Java Platform http://java.sun.com/developer/technicalArticles/Intl/Supplementary/
[10] JNI Types and Data Structures http://java.sun.com/j2se/1.5.0/docs/guide/jni/spec/types.html
[204] DataInput (Java Platform SE 8 ), https://docs.oracle.com/javase/jp/8/docs/api/java/io/DataInput.html#modified-utf-8
[25] MySQL では元々の utf8
は3バイトまでしか表せませんでした。
のちにこれは utf8mb3
という別名が付けられ、それとは別に、
4バイトまで表せる utf8mb4
が追加されています。
[61] MySQL の CHARSET
utf8
、utf8mb3
は、1文字が3バイト以下で表せる範囲の
UTF-8 です。
[62] Unicode の範囲をすべて表せるためには utf8mb4
を使う必要があります。
[16] Official Google Blog: Unicode nearing 50% of the web ( 版) http://googleblog.blogspot.com/2010/01/unicode-nearing-50-of-web.html
[20] Web Applications 1.0 r5940 typo in the allowed UTF-8 ranges ( ( 版)) http://html5.org/tools/web-apps-tracker?from=5939&to=5940
[21] 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?) ( ( 版)) http://html5.org/tools/web-apps-tracker?from=5941&to=5942
[22] RFC 6120 - Extensible Messaging and Presence Protocol (XMPP): Core ( ( 版)) http://tools.ietf.org/html/rfc6120#section-11.6
[23] 「私のために争わないで」文字コードのUTF8さん、自殺 : bogusnews ( ( 版)) http://bogusne.ws/article/41580267.html
[24] IRC logs: freenode / #whatwg / 20120419 ( ( 版)) http://krijnhoetmer.nl/irc-logs/whatwg/20120419
[26] Web Applications 1.0 r7647 Embrace the Encodings specification. ( ( 版)) http://html5.org/tools/web-apps-tracker?from=7646&to=7647
[27] Provide better encoding label guidance. (Basically require utf-8 all ove... · a454d2e · whatwg/encoding ( ( 版)) https://github.com/whatwg/encoding/commit/a454d2e543964b8d5432778ff917324e8032b78c
[28] Web Applications 1.0 r7782 Strip a leading BOM from scripts in workers, if any. Also, use more of the encoding spec. ( ( 版)) http://html5.org/tools/web-apps-tracker?from=7781&to=7782
[29] 3 - JNI Types and Data Structures ( ( 版)) http://docs.oracle.com/javase/1.3/docs/guide/jni/spec/types.doc.html#16542
[30] jwerle/libutf8 ( ( 版)) https://github.com/jwerle/libutf8
[31] Web Applications 1.0 r8405 Various editorial tweaks. ( ( 版)) http://html5.org/tools/web-apps-tracker?from=8404&to=8405
[32] Gmail の (日本語での?) デフォルト設定が2014年4月中頃に ISO-2022-JP から UTF-8 に変わったようです。 (13-17 の間?)
[33] JNI Types and Data Structures ( ( 版)) http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/types.html#wp16542
[35] Web Applications 1.0 r8722 Adjust notes on encoding detection ( ( 版)) http://html5.org/r/8722
[60] Fix #19: reword utf-8 decoder step to avoid extra parenthesis · whatwg/encoding@05d9649 ( 版) https://github.com/whatwg/encoding/commit/05d96490cba5e800e40b76bfd4acc7e7ff2981ae
<?xml encode=”***”>が適当。結構多かった。”utf-8”となるべきところ、”utf8”となっている。
[78] Add utf-8 decode without BOM or fail for HTML · whatwg/encoding@4b20911 ( 版) https://github.com/whatwg/encoding/commit/4b209111f7ab450eb1935551159b98413b5c23e0
[79] Use utf-8 decode without BOM rather than UTF-8 decoder · whatwg/html@39a2e6c ( 版) https://github.com/whatwg/html/commit/39a2e6cde3b4820db56fabe1859de0dc0e6ed8d9
[80] Drop dependencies on Encoding Standard's decoder concept · whatwg/url@37f9329 ( 版) https://github.com/whatwg/url/commit/37f932928378c0df521034cfd223f4ba603ef476
[81] Update integration with Encoding Standard · whatwg/html@6a31c26 ( 版) https://github.com/whatwg/html/commit/6a31c26cf12e39dab1a488e75dd56c03d6786d39
Required parameters: charset
This parameter must exist and must be set to "UTF-8". No other
character sets are allowed for transporting SHF data. The character
set designator MUST be uppercase.
[83] Editorial: avoid teaching bad UTF-8 math · whatwg/encoding@19a25b5 ( 版) https://github.com/whatwg/encoding/commit/19a25b5fcae895853d964b7ee6afa2fe9b6070a8
[84] UTF-8 processing using SIMD (SSE4) () https://woboq.com/blog/utf-8-processing-using-simd.html
[128] Parse application/x-www-form-urlencoded using UTF-8 only (annevk著, ) https://github.com/whatwg/url/commit/3fe969679f78c92c353047661b0c4b6797f099f6
[129] Thunderbird/SeaMonkey の既定のテキストエンコーディングを UTF-8 に変更する · Issue #63 · mozilla-japan/gecko-l10n () https://github.com/mozilla-japan/gecko-l10n/issues/63
[130] Use Encoding's "UTF-8 encode" hook. (mkruisselbrink著, ) https://github.com/w3c/FileAPI/commit/64c346deb9132a8cefc1ce79050256cfc64fcc72
[131] RFC 8160 - IUTF8 Terminal Mode in Secure Shell (SSH) () https://tools.ietf.org/html/rfc8160
UTF-8 is the default encoding for XML and since 2010, it has become the dominant character set on the Web.
[133] XLIFF Version 2.0 () http://docs.oasis-open.org/xliff/xliff-core/v2.0/os/xliff-core-v2.0-os.html#d0e15952
[134] For your information: Illegal UTF-8 proposal · Issue #112 · whatwg/encoding () https://github.com/whatwg/encoding/issues/112
[135] Feedback on the proposal to change U+FFFD generation when decoding ill-formed UTF-8 () http://unicode.org/pipermail/unicode/2017-May/005389.html
format
レスポンス形式を指定する事が出来ます。
値
説明
備考
json
"application/json; charset=utf8"
任意、デフォルト値
[137] 19938 – Number of decoder errors emitted by the UTF-8 decoder for incomplete/invalid sequences () https://www.w3.org/Bugs/Public/show_bug.cgi?id=19938
[138] How Many REPLACEMENT CHARACTERs? (Henri Sivonen著, ) https://hsivonen.fi/broken-utf-8/
はてなブログにこれまで投稿された一部の記事中の「絵文字」が?(クエスチョンマーク)になってしまう不具合が、2017年6月7日(水)にありました。
[141] Use Infra for JSON parsing (annevk著, ) https://github.com/whatwg/fetch/commit/d095af0ebb3343d294c37fab5c124b1a2534b6a6
[142] Use Infra for JSON parsing by annevk · Pull Request #610 · whatwg/fetch () https://github.com/whatwg/fetch/pull/610
[143] Use Infra for JSON parsing (annevk著, ) https://github.com/whatwg/xhr/commit/ed83926c8236d14cc8720f023e09658d8bdd00d3
[144] Require UTF-8 (sideshowbarker著, ) https://github.com/whatwg/html/commit/fae77e3c558b9f083dfb9086752863a4789268f5
[145] Require utf-8 when specifying character encoding by sideshowbarker · Pull Request #3091 · whatwg/html () https://github.com/whatwg/html/pull/3091
[167] Windows 10のInsider PreviewでシステムロケールをUTF-8にするオプションが追加される | スラド () https://srad.jp/story/17/11/14/0640253/
[168] Should UTF-8 'as specified in' point to the Encoding spec? · Issue #253 · w3c/imsc () https://github.com/w3c/imsc/issues/253
[169] Timed Text Working Group Teleconference -- 09 Nov 2017 () https://www.w3.org/2017/11/09-tt-minutes.html#item08
[170] A Branchless UTF-8 Decoder « null program () http://nullprogram.com/blog/2017/10/06/
[171] UTF-8 history () http://www.cl.cam.ac.uk/~mgk25/ucs/utf-8-history.txt
[172] Editorial: uppercase UTF-8 (annevk著, ) https://github.com/whatwg/xhr/commit/aeaa4432bc39ab171d6fede3790bfb4ee3255990
[173] Editorial: uppercase UTF-8 (and other encodings, if any) · Issue #196 · whatwg/xhr () https://github.com/whatwg/xhr/issues/196
[174] Editorial: rewrite send()'s body/content-type processing (domenic著, ) https://github.com/whatwg/xhr/commit/f47bbab42dabe1f52e5e9f1ed1fa6df06a6eb310
[175] Meta: UTF-8 decode without BOM or fail is used (annevk著, ) https://github.com/whatwg/encoding/commit/387b0c08430a27e99c036f64abac9b3dfb46dcd0
[176] Meta: TF-8 decode without BOM or fail is used at least once by annevk · Pull Request #124 · whatwg/encoding () https://github.com/whatwg/encoding/pull/124
[177] Do not use percent decode on strings by annevk · Pull Request #3111 · whatwg/html () https://github.com/whatwg/html/pull/3111
[178] Editorial: replace UTF-8 encode with isomorphic encode (annevk著, ) https://github.com/whatwg/fetch/commit/ffbaefb5c4f68b9d619e9db6491fd665a30a2ffb
[179] Give clearer advice on hooks for standards (annevk著, ) https://github.com/whatwg/encoding/commit/b579018b406d7752f8b7a3aa9c2bc800519c6f1a
[180] Do not use percent decode on strings (annevk著, ) https://github.com/whatwg/html/commit/ce8404fa5d8c2c91725c5262fd69d0d45c227ec8
[181] Do not use percent decode on strings by annevk · Pull Request #3111 · whatwg/html () https://github.com/whatwg/html/pull/3111
[182] Limit Content-Type overrides to when charset isn't already UTF-8 (annevk著, ) https://github.com/whatwg/xhr/commit/721f3c9f3d64aa1ae528efb78468f8c4c7213f91
[183] UTF-8のコードポイントはどうやって高速に数えるか - Qiita () https://qiita.com/saka1_p/items/ff49d981cfd56f3588cc
[184] Require UTF-8 for accept-charset (annevk著, ) https://github.com/whatwg/html/commit/840e22fe5d9be9c3c8c712150c0b98c7a4c62933
[185] Consider restricting <form accept-charset> to utf-8 · Issue #3097 · whatwg/html () https://github.com/whatwg/html/issues/3097
[186] Require UTF-8 for accept-charset by annevk · Pull Request #4195 · whatwg/html () https://github.com/whatwg/html/pull/4195
The <encoding type> is either "utf8" or any other authorized values defined in other parts of ISO/IEC 14772. The identifier "utf8" indicates a clear text encoding that allows for international characters to be displayed in ISO/IEC 14772 using the UTF-8 encoding defined in ISO/IEC 10646-1 (otherwise known as Unicode); see 2.[UTF8].
[189] VRML97, ISO/IEC 14772-1:1997 -- 4 Concepts () https://www.web3d.org/documents/specifications/14772/V2.0/part1/concepts.html#4.3
Content-Type: text/plain;charset=utf8
[192] 662822 - Incomplete page load on abnamro.nl () https://bugs.chromium.org/p/chromium/issues/detail?id=662822
[193] Tcl Improvement Proposals: TIP 587: Default utf-8 for source command () https://core.tcl-lang.org/tips/doc/trunk/tip/587.md
[194] Should Body.formData() always strip the BOM? · Issue #650 · whatwg/fetch () https://github.com/whatwg/fetch/issues/650
[198] rfc3862 () https://datatracker.ietf.org/doc/html/rfc3862#page-15
<meta charset>
参照。