| 標準 | ユニコード標準 |
|---|---|
| 分類 | Unicode変換形式、拡張ASCII、可変長エンコード |
| 拡張 | アスキー |
| 変換/エンコード | ISO/IEC 10646 (ユニコード) |
| 先行 | UTF-1 |
UTF-8は、電子通信に使用される文字エンコード規格です。Unicode標準によって定義され、その名称はUnicode Transformation Format – 8-bitに由来しています。[ 1 ] 2026年現在、ほぼすべてのウェブページ(99%)はUTF-8で送信されています。[ 2 ]
UTF-8は、1~4バイト(8ビット)のコード単位 の可変幅エンコーディングを使用して、1,112,064 [ 3 ]の有効なUnicodeコードポイントすべてをサポートします。
数値の低いコードポイントは、より頻繁に出現する傾向があり、より少ないバイト数でエンコードされます。これはASCIIとの下位互換性のために設計されました。Unicodeの最初の128文字はASCIIと1対1で対応し、ASCIIと同じバイナリ値を持つ1バイトでエンコードされます。そのため、これらの文字のみを使用してUTF-8でエンコードされたファイルはASCIIファイルと同一です。拡張ASCII用に設計されたほとんどのソフトウェアはUTF-8の読み書きが可能であり、これにより、代替テキストエンコードよりも国際化の問題が少なくなります。[ 4 ] [ 5 ]
UTF-8 はインターネット上のすべての国/言語で主流であり、ほとんどの標準で使用され、唯一許可されているエンコード方式であることが多く、すべての最新のオペレーティング システムとプログラミング言語でサポートされています。
国際標準化機構(ISO) は、1989 年にユニバーサルなマルチバイト文字セットの作成に着手しました。ISO 10646 標準の草案には、32 ビットコード ポイントのバイト ストリーム エンコーディングを提供するUTF-1と呼ばれる必須ではない付録が含まれていました。このエンコーディングは、他の問題の中でもパフォーマンスの点で満足のいくものではありませんでしたが、最大の問題は ASCII と非 ASCII が明確に区別されていないことでした。新しい UTF-1 ツールは ASCII でエンコードされたテキストと下位互換性がありますが、UTF-1 でエンコードされたテキストには ASCII では別の意味を持つ 0x21 から 0x7E の範囲の継続バイト (たとえば、 Unixのパスディレクトリ区切り文字である の場合は 0x2F) が含まれる可能性があるため です。/
1992年7月、X/Open委員会XoJIGはより優れた符号化方式を模索していた。Unix System LaboratoriesのDave Prosserは、実装速度が向上し、7ビットASCII文字は文字そのもののみを表現し、マルチバイトシーケンスは上位ビットがセットされたバイトのみを含むという改良点を導入した符号化方式を提案した。File System Safe UCS Transformation Format ( FSS-UTF ) [ 6 ]という名称と、この提案の大部分は、後に最終仕様書に採用された。[ 7 ] [ 8 ] [ 9 ] 1992年8月、この提案はIBM X/Openの代表者によって関係者に 配布された。
ベル研究所のPlan 9 オペレーティングシステムグループのKen Thompsonによる修正により、以前の提案よりもビット効率がいくぶん悪くなるが、自己同期が可能になり、リーダーはどこからでも開始でき、すぐに文字の境界を検出できるようになった。また、長すぎるエンコードを防ぐバイアスの使用も中止された。[ 9 ] [ 10 ] Thompson の設計は 1992 年 9 月 2 日にニュージャージーのダイナーでRob Pikeとともにプレースマットの上で概要が説明された。その後数日で、Pike と Thompson はそれを実装し、Plan 9全体でそれを使用するように更新し、[ 11 ]その成功を X/Open に報告し、 FSS-UTFの仕様としてそれが採用された。[ 9 ] UTF-8は、1993年1月25日から29日までサンディエゴで開催されたUSENIX会議で初めて公式に発表されました。 [ 12 ]インターネットエンジニアリングタスクフォースは、1998年1月にRFC 2277( BCP 18)の文字セットと言語に関するポリシーで将来のインターネット標準作業のためにUTF-8を採用し、古いRFCのLatin-1などのシングルバイト文字セットに取って代わりました。[ 13 ]
2003年11月、UTF-8はRFC 3629によってUTF-16文字エンコーディングの制約と一致するように制限されました。高サロゲート文字と低サロゲート文字に対応するコードポイントを明示的に禁止すると、3バイトシーケンスの3%以上が削除され、U+10FFFFで終わると4バイトシーケンスの48%以上とすべての5バイトと6バイトシーケンスが削除されました。[ 14 ]
UTF-8は、コードポイントの値に応じて、1~4バイトでコードポイントをエンコードします。次の表では、16進数を表す文字uからzが、 U+ uvwxyz の位置にある、その構成ビットであるuuuuからzzzzに置き換えられています。
| 最初のコードポイント | 最後のコードポイント | バイト1 | バイト2 | バイト3 | バイト4 |
|---|---|---|---|---|---|
| 0000 | U+007F | 0 yyyzzzz | |||
| U+0080 | U+07FF | 110 xxxyy | 10ええええええ | ||
| U+0800 | U+FFFF | 1110 wwww | 10 xxxxyy | 10ええええええ | |
| U+010000 | U+10FFFF | 11110 uvv | 10うわあああああ | 10 xxxxyy | 10ええええええ |
たとえば、文字「 桁 」の16進コードポイントはU+6841で、これは2進数では0110 1000 0100 0001となり、UTF-8エンコードでは11100110 10100001 10000001となります。
最初の128コードポイント(ASCII)には1バイトが必要です。次の1,920コードポイントのエンコードには2バイトが必要で、ほぼすべてのラテン文字アルファベットの残りと、IPA拡張、ギリシャ文字、キリル文字、コプト文字、アルメニア文字、ヘブライ文字、アラビア文字、シリア文字、ターナ文字、ンコ文字、および結合ダイアクリティカルマークをカバーします。中国語、日本語、韓国語のほとんどの文字を含む基本多言語面(BMP)の残りの61,440コードポイントには3バイトが必要です。絵文字、あまり一般的ではないCJK文字、その他の有用な文字を含む1,048,576の非BMPコードポイントには4バイトが必要です。[ 15 ]
UTF-8はプレフィックスコードであり、コードポイントの最終バイト以降を読み取ってデコードする必要はありません。Shift -JISなどの多くの初期のマルチバイトテキストエンコーディングとは異なり、UTF-8は自己同期型であるため、短い文字列や文字の検索が可能です。また、コードポイントの開始位置は、最大3バイトまで遡ることでランダムな位置から見つけることができます。リードバイトに選択された値は、UTF-8文字列のリストをソートすると、 UTF-32文字列をソートした場合と同じ順序になることを意味します。
上記の表の行を使用して「最初のコードポイント」より小さいコードポイントをエンコードする(つまり、必要以上に多くのバイトを使用する)ことを、長すぎるエンコードと呼びます。これは、悪意のあるJavaScriptなどの文字列を許し、セキュリティ検証をバイパスする可能性があるため、セキュリティ上の問題となります。これは、MicrosoftのIISウェブサーバー[ 16 ]やApacheのTomcatサーブレットコンテナ[ 17 ]../など、多くの有名製品で報告されています。したがって、長すぎるエンコードはエラーとみなし、決してデコードしないでください。
すべてのバイトシーケンスが有効なUTF-8であるとは限りません。UTF-8デコーダーは、以下の点に対応する必要があります。
初期のUTF-8デコーダの多くは、これらのビットを無視してデコードしていました。巧妙に細工された無効なUTF-8は、NUL、スラッシュ、引用符などのASCII文字をスキップまたは作成し、セキュリティ上の脆弱性につながる可能性があります。また、エラー発生時に例外をスローしたり文字列を切り捨てたりすることも一般的です[ 18 ]が、これは本来は無害なエラー(例えば「ファイルが見つからない」など)をサービス拒否攻撃に変えてしまいます。例えば、Python 3.0の初期バージョンでは、コマンドラインまたは環境変数に無効なUTF-8が含まれていると即座に終了していました[ 19 ] 。
RFC 3629では、「デコードアルゴリズムの実装は、無効なシーケンスのデコードから保護する必要がある」と述べられています。[ 20 ] Unicode標準では、デコーダーに次のことを要求しています。「...不正なコード単位シーケンスをエラー状態として扱います。これにより、不正なコード単位シーケンスを解釈したり出力したりしないことが保証されます。」現在、標準では、各エラーを置換文字「 �」(U+FFFD)に置き換えてデコードを継続することが推奨されています。
一部のデコーダーは、 E1,A0,20というシーケンス(切り捨てられた3バイトコードにスペースが続く)を単一のエラーとみなします。スペース文字を検索すると、エラーの中に隠れているスペース文字が見つかる可能性があるため、これは良い考えではありません。Unicode 6(2010年10月)[ 1 ]以降、標準規格(第3章)では、エラーが1バイトの継続であるか、または許可されていない最初のバイトで終了するという「ベストプラクティス」が推奨されています。したがって、E1,A0,20は2バイトのエラーで、スペースが続くことになります。エラーは3バイト以下で、有効な文字の先頭を含むことはなく、21,952 通りのエラーが考えられます。多くのデコーダーは各バイトをエラーとして扱います。その場合、E1,A0,20は2つのエラーとそれに続くスペースになります。現在、エラーの種類は128通りしかないため、エラーを出力文字列に格納するか、[ 21 ]、従来のエンコードの文字に置き換えることが現実的です。
エラーのないUTF-8は、バイト文字列のごく一部に限られます。複数のバイトが出現することはなく、最上位ビットがセットされたバイトが単独で出現することもできません。また、真にランダムな文字列では、最上位ビットがセットされたバイトが有効なUTF-8文字の先頭となる確率はわずか1/15です。このため、UTF-8の代わりに誤ってレガシーテキストエンコーディングが使用された場合でも容易に検出でき、システムをUTF-8に変換することが容易になり、バイトオーダーマーク( BOM)やその他のメタデータを必要とする必要がなくなります。
RFC 3629 (2003年11月) 以降、 UTF-16 で使用される上位サロゲートと下位サロゲート( U+D800からU+DFFFまで) は正当な Unicode 値ではないため、UTF-8 エンコーディングでは無効なバイトシーケンスとして扱う必要があります。[ 20 ]これらのエンコーディングはすべて0xEDで始まり、その後に0xA0以上が続きます。Windows のファイル名ではサロゲートが許可されているため、このルールは無視されることが多く、これはサロゲートを文字列に格納する方法が必要であることを意味します。[ 22 ]これらのサロゲート半分を許可する UTF-8 は (非公式に) WTF-8 (wobbly transformation format、"wobbly transformation format")と呼ばれています。 [ 23 ]また、BMP 以外のすべての文字を 2 つのサロゲート (4 バイトではなく 6 バイト) としてエンコードする別のバリエーションはCESU-8と呼ばれます。
以下の表は、UTF-8 でエンコードされたストリーム内の各バイトの詳細な意味を示しています。
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | あ | B | C | D | E | F | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | ␀ | ␁ | ␂ | ␃ | ␄ | ␅ | ␆ | ␇ | ␈ | ␉ | ␊ | ␋ | ␌ | ␍ | ␎ | ␏ |
| 1 | ␐ | ␑ | ␒ | ␓ | ␔ | ␕ | ␖ | ␗ | ␘ | ␙ | ␚ | ␛ | ␜ | ␝ | ␞ | ␟ |
| 2 | ␠ | ! | 「 | # | $ | % | & | ' | ( | ) | * | + | 、 | - | 。 | / |
| 3 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | : | ; | < | = | > | ? |
| 4 | @ | あ | B | C | D | E | F | G | H | 私 | J | K | L | M | 北 | お |
| 5 | P | 質問 | R | S | T | あなた | V | W | X | はい | Z | [ | \ | ] | ^ | _ |
| 6 | ` | 1つの | b | c | d | e | f | グラム | h | 私 | j | け | l | メートル | n | o |
| 7 | p | q | r | s | t | あなた | v | わ | × | y | z | { | | | } | 〜 | ␡ |
| 8 | ||||||||||||||||
| 9 | ||||||||||||||||
| あ | ||||||||||||||||
| B | ||||||||||||||||
| C | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 |
| D | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 |
| E | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| F | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 5 | 5 | 5 | 5 | 6 | 6 |
| ASCII制御文字 | |
| ASCII文字 | |
| 継続バイト | |
| Nバイトのコードユニットシーケンスの最初のバイト | |
| すべての継続バイトが許可されるわけではない | |
| 未使用 |
Unicodeバイト順序マークU+FEFFがUTF-8 ファイルの先頭にある場合、最初の 3 バイトは0xEF、0xBB、0xBFになります。
Unicode標準では、UTF-8でのBOMの使用は必須でも推奨もされていないが、別のエンコードからトランスコードされたファイルの先頭でBOMに遭遇する可能性があると警告している。[ 24 ] UTF-8でエンコードされたASCIIテキストはASCIIと下位互換性があるが、Unicode標準の推奨事項が無視され、BOMが追加された場合には下位互換性がない。BOMは、BOMに対応していないがそれ以外はUTF-8を受け入れるソフトウェアを混乱させる可能性がある。例えば、文字列リテラルでは非ASCIIバイトを許可するがファイルの先頭では許可しないプログラミング言語などである。しかしながら、UTF-8を書き込む際に常にBOMを挿入し、最初の文字がBOMでない限り(またはファイルにASCIIしか含まれていない場合)、UTF-8を正しく解釈しないソフトウェアが存在したし、現在も存在している。[ 25 ]
長い間、テキストをUTF-16で処理するか UTF-8 で処理するかについてはかなりの議論がありました。UTF-16 の主な利点は、Windows API がすべての Unicode 文字にアクセスするためにそれを必要としていたことです (UTF-8 は 2019 年 5 月まで Windows で完全にはサポートされていませんでした)。このため、 Qtなどのいくつかのライブラリも UTF-16 文字列を使用し、この要件が Windows 以外のプラットフォームにも伝播しました。Unicode の初期の頃には、 U+FFFFより大きい文字はなく、結合文字がほとんど使用されなかったため、16 ビット エンコーディングは実質的に固定サイズでした。固定サイズのエンコーディングによって処理がより効率的になると考える人もいましたが、UTF-16 も可変幅になるとすぐに、そのような利点は失われました。コード ポイントU+0800 – U+FFFF は、UTF-8 では 3 バイトかかりますが、UTF-16 では 2 バイトしかかかりません。このことから、中国語やその他の言語のテキストは UTF-8 の方が多くのスペースを必要とするという考えが生まれました。しかし、テキストが大きくなるのは、これらのコードポイントが1バイトのASCIIコードポイントよりも多い場合のみであり、実際の文書ではスペース、改行、数字、句読点、英語の単語、マークアップなどにより、このような事態はほとんど起こりません。[ 26 ] UTF-8には、拡張ASCIIを処理できるシステムに簡単に後付けできること、バイト順の問題がないこと、ラテン文字を主に使用する言語ではスペースが約半分になるなどの利点があります。


UTF-8は2008年以来、ワールドワイドウェブで最も一般的なエンコーディングとなっています。[ 28 ] 2026年1月現在、調査対象のウェブサイトの98.9%でUTF-8が使用されています。[ 2 ]多くのページではコンテンツを表示するためにASCII文字のみを使用していますが、現在、UTF-8ではなくASCIIのみをエンコーディングとして宣言しているウェブサイトはごくわずかです。[ 29 ]事実上すべての国と言語で、ウェブ上でUTF-8エンコーディングが95%以上使用されています。
多くの標準規格はUTF-8のみをサポートしています。例えば、JSON交換ではUTF-8(バイトオーダーマーク(BOM)なし)が必要です。[ 30 ] WHATWGはHTMLとDOMの仕様にもUTF-8を必須としており、「UTF-8エンコーディングはUnicodeの交換に最も適したエンコーディングである」と述べています。[ 5 ]また、インターネットメールコンソーシアムは、すべての電子メールプログラムがUTF-8を使用してメールを表示および作成できることを推奨しています。[ 31 ] [ 32 ]ワールドワイドウェブコンソーシアムは、 XMLとHTMLのデフォルトのエンコーディングとしてUTF-8を推奨しています(UTF-8を使用するだけでなく、メタデータでも宣言する必要があります)。「すべての文字がASCII範囲内にある場合でも、UTF-8以外のエンコーディングを使用すると予期しない結果が生じる可能性があります。」 W3C HTML仕様バージョン5.3とWHATWGの現在のLiving StandardはどちらもUTF-8を必須としています。[ 33 ] [ 34 ]
多くのソフトウェアプログラムはUTF-8の読み書き機能を備えています。ただし、ユーザーが通常の設定からオプションを変更する必要がある場合や、ファイルを読み取る際に最初の文字としてBOM(バイトオーダーマーク)が必要になる場合があります。UTF-8をサポートするソフトウェアの例としては、Microsoft Word、[ 35 ] [ 36 ] Microsoft Excel(Office 2003以降)、[ 37 ] Google Drive、LibreOffice、[ 38 ]、そしてほとんどのデータベースが挙げられます。
UTF-8 を「デフォルト」とするソフトウェア(つまり、ユーザーが設定を変更しなくても書き込み、BOM なしで読み込むソフトウェア)は、2010 年以降、より一般的になってきた。[ 39 ]現在サポートされているすべての Windows バージョンで、 Windows メモ帳はデフォルトで BOM なしの UTF-8 を書き込むようになっており( Windows 7メモ帳からの変更点)、他のほとんどのテキスト エディターと一致するようになっている。[ 40 ] Windows 11の一部のシステム ファイルはBOM を必要とせずUTF-8 を必要とする。 [ 41 ]また、macOS およびほとんどの Linux ディストリビューションのほぼすべてのファイルは BOM なしの UTF-8 であることが要求される。入出力のデフォルトを UTF-8 とするプログラミング言語には、Ruby 3.0 、[ 42 ] [ 43 ] R 4.2.2、[ 44 ] Raku、Java 18などがある。 [ 45 ] Python 3.15 では、入出力のデフォルトが UTF-8 になっている。[ 46 ] [ 47 ]open()以前のバージョンでは、UTF-8の読み書きにはオプションが必要でした。 [ 48 ] C++23では、UTF-8が唯一の移植可能なソースコードファイル形式として採用されました。[ 49 ]
下位互換性は、 UTF-16を使用しているコードや API をUTF-8 を使用するように変更する上で大きな障害となりますが、これは実際に行われています。2019 年 5 月、Microsoft はアプリケーションが Windows API の「コード ページ」として UTF-8 を設定する機能を追加し、UTF-16 を使用する必要性をなくしました。さらに最近では、プログラマーに UTF-8 を使用することを推奨し、 [ 50 ]「UTF-16 は、複数のプラットフォームを対象とするコードに対して Windows が課す独特の負担である」とさえ述べています。[ 4 ] Go、[ 51 ] Julia、Rust、Swift (バージョン 5 以降)、[ 52 ] PyPy [ 53 ]のデフォルトの文字列プリミティブは、すべてのケースで内部的に UTF-8 を使用します。 Python(バージョン3.3以降)はPython C API拡張に内部的にUTF-8を使用しています[ 54 ] [ 55 ]また、文字列にもUTF-8が使用されることがあります[ 54 ] [ 56 ]。Pythonの将来のバージョンでは、文字列をデフォルトでUTF-8で保存することが計画されています。[ 57 ] [ 58 ] Microsoft Visual Studioの最新バージョンは内部的にUTF-8を使用しています。[ 59 ]現在サポートされているすべてのMicrosoft SQL Serverのバージョンは、インポートとエクスポートでUTF-8をサポートしており、さらにメインストリームサポート(つまりSQL Server 2019以降)のすべてが内部的にUTF-8をサポートしており、UTF-8を使用すると速度が35%向上し、「ストレージ要件がほぼ50%削減」されます。[ 60 ]
Java は内部的にデータ型に UTF-16 を使用しchar、その結果、、、CharacterクラスにStringもUTF-16 を使用しますが[ 61 ]、I/O にはModified UTF-8 (MUTF-8) を使用します。MUTF-8 では、ヌル文字U+0000は、単なる0x00ではなく、2 バイト長すぎるエンコード0xC0、 0x80を使用します。[ 62 ] Modified UTF-8 文字列には実際のヌルバイトは含まれませんが、 U+0000 を含むすべての Unicode コードポイントを含めることができます。[ 63 ]これにより、このような文字列 (ヌルバイトが追加された) を従来のヌル終端文字列関数で処理できます。 Java はファイルやストリームに対して通常の UTF-8 の読み書きを行いますが[ 64 ] 、オブジェクトのシリアル化、[ 65 ] [ 66 ] Java Native Interface、[ 67 ] [ 63 ] Dalvikによって定義されたdex形式も、文字列値の表現に同じ修正UTF-8を使用しています。[ 68 ] Tclも、Unicodeデータの内部表現にはJavaと同じ修正UTF-8 [ 69 ]を使用していますが、外部データには厳密なCESU-8を使用しています。既知のすべての修正UTF-8実装も、サロゲートペアをCESU-8と同様に扱います。 StringBuffer
Rakuプログラミング言語(旧Perl 6)は、入出力にデフォルトでエンコーディングを使用します(utf-8 Perl 5もこれをサポートしています)。ただし、Rakuでのこの選択は「Unicode NFC(正規化形式標準)への正規化」も意味します。場合によっては、ユーザーは正規化が行われないようにしたいでしょう。この場合は「utf8-c8」を使用できます。[ 70 ] Rakuによって実装されたUTF-8 Clean-8バリアントは、バイトをそのまま(不正なUTF-8シーケンスであっても)保存し、正規形グラフィム合成を可能にするエンコーダ/デコーダです。[ 71 ]
Pythonプログラミング言語バージョン3では、無効なUTF-8バイトストリームの各バイトをエラーとして扱います(Python 3.7の新しいUTF-8モードの変更点も参照[ 72 ])。これにより、128種類のエラーが発生する可能性があります。UTF-8であると想定されるバイトシーケンスをロスレスでUTF-16またはUTF-32に変換できるようにするための拡張機能が作成されました。これは、128種類のエラーバイトを128個の予約済みコードポイントに変換し、それらのコードポイントをエラーバイトに戻してUTF-8を出力することで実現されます。最も一般的なアプローチは、コードをU+DC80 ... U+DCFFに変換することです。これは、 PythonのPEP 383(または「surrogateescape」)アプローチで使用される、下位(末尾)のサロゲート値であり、したがって「無効な」UTF-16です。 [ 21 ] NumPyバージョン2.0とそのファイル形式は、UTF-8をサポートしています(StringDTypeが追加されました)。[ 73 ] MirBSD OPTU-8/16と呼ばれる別のエンコーディングは、これらをプライベート使用領域内のU+EF80 ... U+EFFFに変換します。[ 74 ]どちらのアプローチでも、バイト値は出力コードポイントの下位8ビットにエンコードされます。これらのエンコーディングは、無効なUTF-8をPython内部で使用されるUTF-16への変換とUTF-16からの逆変換で生き残るために必要であり、Unixファイル名には無効なUTF-8が含まれる可能性があるため、これが機能するためには必要です。[ 75 ]
Unix系システムのほとんどのファイルシステムは、ファイル名のバイト比較によってファイル名の検索が行われるため、UTF-8を使用してファイル名をエンコードできます。Linuxのext4とmacOSのAPFSファイルシステムは、大文字と小文字を区別しないファイル名検索をサポートしています。これには、ファイル名のエンコードを指定する必要があります。ext4はUTF-8をサポートしており、デフォルトでそれを使用します。 [ 76 ] APFSはUTF-8を必須とします。[ 77 ] Appleの古いHFS Plusはファイル名にUTF-16を使用しますが、シンボリックリンクではUTF-8を使用します。[ 78 ] WindowsのファイルシステムであるNTFSは、ファイル名にUTF-16を使用します。
このエンコーディングの正式名称は でUTF-8、これはUnicodeコンソーシアムのすべての文書で使用されている綴りです。ハイフン(-)は必須で、スペースは使用できません。他に使用されている名称には以下のものがあります。
utf-8頻繁に使用されます。utf8他の多くのエイリアスも許可されています。[ 79 ]ただし、HTML文書では、エンコーディングを「文字列 'utf-8 'に大文字と小文字を区別しないASCII一致」として指定する必要があります。[ 33 ]csUTF8は唯一の別名としてリストされていますが、 [ 80 ]これはめったに使用されません。UTF-8NUTF-8を意味し、この場合はBOMがあることを意味する場合があります。 [ 81 ] [ 82 ]UTF-865001[ 83 ]CP_UTF8です。utf8mb4と呼ばれ、およびは廃止されたCESU-8の変種を指します。[ 85 ]utf8utf8mb3AL32UTF8はUTF-8(バージョン9.0以降)を意味し、 はUTF8CESU-8(バージョン8.0以降)を意味します。[ 86 ] OracleのUTF8エンコーディングは、完全なUTF8/AL32UTF8のサブセットに過ぎないため、使用すべきではありません(日本語と中国語はサポートされておらず、Unicode 3.0のみをサポートし、4バイト形式ではありません。AL32UTFFSS古いOracleデータベースのもう1つの不完全なサブセットです)。[ 87 ]18N。[ 88 ]さまざまな標準ドキュメントには、UTF-8 の現在の定義がいくつかあります。
これらは、以下の古い文献で与えられた定義に取って代わります。
これらはすべて一般的なメカニズムにおいて同じですが、主な違いは、コード ポイント値の許容範囲や無効な入力の安全な処理などの問題にあります。
各エンコード形式は、UnicodeコードポイントU+0000..U+D7FFとU+E000..U+10FFFFをマッピングします。
.txtCSV…実際には、UTF-8が圧倒的に最も一般的なエンコーディングであるため、通常はUTF-8を前提とします。
現在、新規テキストファイルを BOM なしの UTF-8 で保存することをデフォルトとしています(以下参照)。
でUTF-8エンコードが使用されていることを確認してください。
UTF-8表現はオンデマンドで作成され、Unicodeオブジェクトにキャッシュされます。
PEP 623 に従い、Unicode オブジェクトの C 実装から
非推奨の
およびメンバーが削除されました。
wstrwstr_length
Visual Studioは、ソース文字セットと実行文字セット間の変換時に、内部文字エンコードとしてUTF-8を使用します。
InputStreamReaderとOutputStreamWriterDataInputとDataOutput以前はXP(未検証だがVistaでもおそらく)では、コードページ65001が有効な間はforループが動作しませんでした。