ホームページ バックエンド開発 PHPチュートリアル 文字セットのエンコーディングである ASCII、Unicode、UTF-8 についてどれくらい知っていますか?文字セットエンコーディングの概要 (コレクション)

文字セットのエンコーディングである ASCII、Unicode、UTF-8 についてどれくらい知っていますか?文字セットエンコーディングの概要 (コレクション)

Aug 31, 2018 am 11:22 AM
ascii unicode utf-8

文字セット エンコーディング ASCII、Unicode、UTF-8 についてどれくらい知っていますか?この記事では、文字セットのエンコーディングについて徹底的に理解します。この記事では、ASCII、Unicode、UTF-8 エンコードの問題と変換、および分析例を紹介します。記事を読み始めてください

1. ASCII コード

コンピューター内部では、すべての情報は最終的にはバイナリ値であることがわかっています。各バイナリ ビット (ビット) には 0 と 1 の 2 つの状態があるため、8 つのバイナリ ビットを組み合わせて 256 個の状態にすることができ、これをバイトと呼びます。つまり、1 バイトを使用して合計 256 の異なる状態を表すことができ、各状態は 00000000 から 11111111 までの 256 個のシンボルに対応します。

1960 年代に、米国は英語の文字とバイナリ ビットの関係を統一する一連の文字エンコーディングを策定しました。これは ASCII と呼ばれ、現在でも使用されています。

ASCII コードでは、合計 128 文字のエンコーディングが指定されます。たとえば、SPACE は 32 (バイナリ 00100000)、大文字の A は 65 (バイナリ 01000001) です。これら 128 個のシンボル (印刷できない 32 個の制御シンボルを含む) はバイトの最後の 7 ビットのみを占め、最初のビットは一律に 0 に設定されます。

ASCII 制御文字

文字セットのエンコーディングである ASCII、Unicode、UTF-8 についてどれくらい知っていますか?文字セットエンコーディングの概要 (コレクション)

ASCII 表示可能文字

文字セットのエンコーディングである ASCII、Unicode、UTF-8 についてどれくらい知っていますか?文字セットエンコーディングの概要 (コレクション)

2. 非 ASCII エンコーディング

英語は 128 個の記号でエンコードできますが、他の言語を表すには 128 個の記号では不十分です。 。たとえば、フランス語では、文字の上に発音記号がある場合、ASCII コードでは表現できません。その結果、ヨーロッパの一部の国は、バイト内のアイドル状態の最上位ビットを使用して新しいシンボルをエンコードすることを決定しました。たとえば、フランス語の é のエンコードは 130 (バイナリ 10000010) です。その結果、これらのヨーロッパ諸国で使用されているエンコード システムは、最大 256 個のシンボルを表現できます。

しかし、ここで新たな問題が発生します。国が異なれば文字は異なります。そのため、すべての国が 256 記号のエンコードを使用しているとしても、表す文字は異なります。たとえば、130 はフランス語のエンコードでは é を表し、ヘブライ語のエンコードでは文字 Gimel (ג) を表し、ロシア語のエンコードでは別の記号を表します。しかし、いずれにせよ、これらすべての符号化方法において、0 ~ 127 で表されるシンボルは同じであり、唯一の違いはセクション 128 ~ 255 です。

アジア諸国の文字に関しては、さらに多くの記号が使用されており、その数は 10 万もの漢字に及びます。 1 バイトでは 256 個のシンボルしか表現できませんが、これでは明らかに不十分であり、1 つのシンボルを表現するには複数のバイトを使用する必要があります。たとえば、簡体字中国語の一般的なエンコード方式は GB2312 で、中国語の文字を表すのに 2 バイトを使用するため、理論的には最大 256 x 256 = 65536 個の記号を表現できます。

中国語のエンコーディングの問題については、特別な記事で説明する必要がありますが、このノートでは取り上げません。ここで指摘するのは、記号を表すために複数のバイトが使用されますが、GB クラスの中国語文字エンコーディングは、後述する Unicode および UTF-8 とは何の関係もありません。

3. Unicode

前のセクションで述べたように、世界には多くのエンコード方法があり、同じ 2 進数を使用することもできます。さまざまな記号に解釈されます。したがって、テキスト ファイルを開く場合は、そのエンコード方法を知っておく必要があり、間違ったエンコード方法で解釈すると文字化けが発生します。メールがよく文字化けするのはなぜですか?これは、送信者と受信者が異なるエンコード方式を使用しているためです。

世界中のすべてのシンボルを含むコーディングが存在すると考えられます。各シンボルには固有のコードが与えられるため、コード化けの問題は解消されます。これは、その名前が示すように、すべての記号のエンコードである Unicode です。

Unicode はもちろん大規模なコレクションであり、現在 100 万を超えるシンボルを保持できます。各記号のエンコードは異なります。たとえば、U 0639 はアラビア文字の Ain を表し、U 0041 は英語の大文字 A を表し、U 4E25 は漢字の Yan を表します。特定の記号対応表については、unicode.org または特殊な漢字対応表を確認できます。

4. Unicode の問題

Unicode は単なるシンボル セットであり、シンボルのバイナリ コードを指定するだけであることに注意してください。ただし、このバイナリ コードをどのように保存するかについては仕様がありません。

たとえば、漢字「燕」の Unicode は 16 進数 4E25 で、これを 15 桁の 2 進数 (100111000100101) に変換すると、この記号の表現には少なくとも 2 バイトが必要になります。他の大きなシンボルを表すには、3 バイトまたは 4 バイト、あるいはそれ以上のバイトが必要になる場合があります。

ここには 2 つの重大な問題があります 最初の質問は、Unicode と ASCII をどのように区別するかということです。コンピュータは、3 バイトが 3 つの別々のシンボルではなく 1 つのシンボルを表すことをどのようにして認識するのでしょうか? 2 番目の問題は、英語の文字を表すには 1 バイトだけで十分であることがすでにわかっているということです。Unicode で各記号が 3 バイトまたは 4 バイトで表現されると統一的に規定されている場合、各英語文字の前には 2 文字が必要です。3 バイトは 0、これはストレージの膨大な無駄であり、テキスト ファイルのサイズは 2 倍または 3 倍大きくなり、これは容認できません。

それらが引き起こす結果は、: 1) Unicode の複数の保存方法が登場しました。これは、Unicode を表現するために使用できるさまざまなバイナリ形式が存在することを意味します。 2) Unicode は、インターネットが出現するまで長い間普及することができませんでした。

5. UTF-8

インターネットの普及により、統一されたエンコード方式の出現が強く求められています。 UTF-8 は、インターネット上で最も広く使用されている Unicode 実装です。他の実装には、UTF-16 (文字は 2 バイトまたは 4 バイトで表される) や UTF-32 (文字は 4 バイトで表される) などがありますが、これらはインターネットではほとんど使用されません。繰り返しますが、ここでの関係は、UTF-8 が Unicode の実装であるということです。

UTF-8 の最大の特徴の 1 つは、可変長エンコード方式であることです。シンボルを表すのに 1 ~ 4 バイトを使用でき、バイト長はシンボルによって異なります。

UTF-8 のエンコード規則は非常に単純で、次の 2 つだけです:

1. シングルバイト記号の場合、バイトの最初のビットが設定されますから 0、および次の 7 ビットは、このシンボルの Unicode コードです。したがって、英語の文字の場合、UTF-8 エンコードと ASCII エンコードは同じです。

2. n バイトのシンボル (n > 1) の場合、最初のバイトの最初の n ビットは 1 に設定され、n 番目の 1 ビットは 0 に設定され、次のバイトの最初の 2 ビットはバイトは 1 に設定されます。常に 10 に設定されます。言及されていない残りの 2 進ビットはすべて、このシンボルの Unicode コードです。

次の表は、エンコード ルールをまとめたものです。文字 x は、使用可能なエンコード ビットを示します。

文字セットのエンコーディングである ASCII、Unicode、UTF-8 についてどれくらい知っていますか?文字セットエンコーディングの概要 (コレクション)

#上記の表によると、UTF-8 エンコーディングの解釈は非常に簡単です。バイトの最初のビットが 0 の場合、そのバイトだけが文字です。最初のビットが 1 の場合、連続する 1 の数は、現在の文字が占めるバイト数を示します。

次に、漢字の「燕」を例として、UTF-8 エンコーディングを実装する方法を示します。

Yan の Unicode は 4E25 (100111000100101) です。上の表によると、4E25 は 3 行目 (0000 0800 - 0000 FFFF) の範囲にあることがわかりますので、Yan の UTF-8エンコードには 3 バイトが必要です。つまり、形式は 1110xxxx 10xxxxxx 10xxxxxx です。次に、Yan の最後の 2 進数から始めて、形式の x を後ろから前に埋め、余分なビットを 0 で埋めます。このようにして、Yan の UTF-8 エンコーディングは 11100100 10111000 10100101 であることがわかり、16 進数に変換すると E4B8A5 になります。

6. Unicode と UTF-8 の間の変換

前のセクションの例から、Yan の Unicode コードが 4E25 であることがわかります。 , UTF-8エンコーディングはE4B8A5であり、この2つは異なります。それらの間の変換はプログラムを通じて実現できます。

Windows プラットフォームの場合、最も簡単な変換方法の 1 つは、組み込みのメモ帳アプレット notepad.exe を使用することです。ファイルを開いた後、[ファイル] メニューの [名前を付けて保存] コマンドをクリックすると、ダイアログ ボックスが表示され、下部にコーディング ドロップダウン バーが表示されます。

文字セットのエンコーディングである ASCII、Unicode、UTF-8 についてどれくらい知っていますか?文字セットエンコーディングの概要 (コレクション)

ANSI、Unicode、Unicode ビッグ エンディアン、UTF-8 の 4 つのオプションがあります。

  • #ANSI がデフォルトのエンコードです。英語ファイルの場合は ASCII エンコード、簡体字中国語ファイルの場合は GB2312 エンコードです (Windows 簡体字中国語バージョンの場合のみ、繁体字中国語バージョンの場合は Big5 コードが使用されます)。

  • ここでの Unicode エンコードは、notepad.exe で使用される UCS-2 エンコード方式を指し、2 バイトを直接使用して文字の Unicode コードを保存します。このオプションはリトル エンディアン形式を使用します。 . .

  • Unicode ビッグ エンディアン エンコードは、前のオプションに対応します。リトルエンディアンとビッグエンディアンの意味については次の章で説明します。

  • UTF-8 エンコード。これは、前のセクションで説明したエンコード方法です。

「エンコード方式」を選択後、「保存」ボタンをクリックすると、すぐにファイルのエンコード方式が変換されます。

7. リトル エンディアンとビッグ エンディアン

前のセクションで説明したように、UCS-2 形式は Unicode コード (コード ポイント) を保存できます。 0xFFFFを超えない)。漢字のヤンを例にとると、Unicode コードは 4E25 で、1 バイトが 4E、もう 1 バイトが 25 の 2 バイトで格納する必要があります。格納する場合、前に4E、後ろに25が来るビッグエンディアン方式と、前に25、後ろに4Eが来るリトルエンディアン方式があります。

これら 2 つの奇妙な名前は、イギリスの作家スウィフトの「ガリバー旅行記」に由来しています。この本の中で、リリパットで内戦が勃発しましたが、その原因はビッグエンディアンとリトルエンディアンのどちらからエッグを割るかをめぐる人々の争いでした。この事件により六度の戦争が勃発し、一人の皇帝が命を落とし、また一人の皇帝が王位を失った。

最初のバイトが最初に来る「ビッグ エンディアン」、2 番目のバイトが最初に来る「リトル エンディアン」です。

したがって、当然のことながら、次のような疑問が生じます。コンピュータは、特定のファイルがどの方法でエンコードされているかをどのようにして知るのでしょうか?

Unicodeの仕様では、各ファイルの先頭にエンコード順序を示す文字を付加することが定められており、この文字の名前は「ゼロ幅ノーブレークスペース」(ゼロ幅ノーブレークスペース)と呼ばれます。代表はFEFF。これはちょうど 2 バイトであり、FF は FE より 1 大きい値です。

テキスト ファイルの最初の 2 バイトが FE FF の場合は、ファイルがビッグエンド モードを使用していることを意味し、最初の 2 バイトが FF FE の場合は、ファイルがスモールエンド モードを使用していることを意味します。

8. 例

以下に例を示します。

「メモ帳」プログラム notepad.exe を開き、新しいテキスト ファイルを作成します。内容は厳密文字で、ANSI、Unicode、Unicode ビッグ エンディアン、および UTF-8 エンコードで保存します。

次に、テキスト編集ソフトウェア UltraEdit の「hex 関数」を使用して、ファイルの内部エンコーディングを観察します。

  • ANSI: ファイルのエンコードは 2 バイトの D1 CF で、これは厳密な GB2312 エンコードであり、GB2312 がビッグ ヘッド モードで保存されていることも意味します。

  • Unicode: エンコードは 4 バイト FF FE 25 4E です。FF FE はスモール ヘッド モードで格納されていることを示し、実際のエンコードは 4E25 です。

  • Unicode ビッグ エンディアン: エンコードは 4 バイト FE FF 4E 25 で、FE FF はビッグ エンディアン ストレージを示します。

  • UTF-8: エンコードは 6 バイト EF BB BF E4 B8 A5 です。最初の 3 バイト EF BB BF は、これが UTF-8 エンコードであることを示し、最後の 3 バイトはE4B8A5. Yan 固有のエンコーディング、その格納順序はエンコーディング順序と一致します。

#9. 多読 (課外知識)##すべてのソフトウェア開発者が絶対に、確実に Unicode について知っておくべき絶対最低限の知識および文字セット (文字セットに関する最も基本的な知識)

Unicode エンコードについて説明します: RFC3629: ISO 10646 の変換形式である UTF-8 (UTF-8 の規制が実装されている場合)

以上が文字セットのエンコーディングである ASCII、Unicode、UTF-8 についてどれくらい知っていますか?文字セットエンコーディングの概要 (コレクション)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

1 つの ASCII 文字は何バイトを占めますか? 1 つの ASCII 文字は何バイトを占めますか? Mar 09, 2023 pm 03:49 PM

1 つの ASCII 文字が 1 バイトを占めます。 ASCII コード文字は、コンピュータでは 7 ビットまたは 8 ビットのバイナリ エンコーディングで表され、1 バイトで格納されます。つまり、1 つの ASCII コードが 1 バイトを占めます。 ASCII コードは、標準 ASCII コードと拡張 ASCII コードに分けることができます。標準 ASCII コードは、基本 ASCII コードとも呼ばれます。7 ビットの 2 進数 (残り 1 桁は 0) を使用して、すべての大文字と小文字を表します。 0 ~ 9 の数字。アメリカ英語で使用される句読点および特殊な制御文字。

PHPを深く理解する:JSON Unicodeを中国語に変換する実装方法 PHPを深く理解する:JSON Unicodeを中国語に変換する実装方法 Mar 05, 2024 pm 02:48 PM

PHP の深い理解: JSONUnicode を中国語に変換する実装方法 開発中、JSON データを処理する必要がある状況によく遭遇しますが、特に変換する必要がある場合、JSON 内の Unicode エンコードによっていくつかのシナリオで問題が発生します。 Unicode エンコードを漢字に変換する場合。 PHP では、この変換処理を実現するためのメソッドがいくつかありますが、以下では一般的なメソッドを紹介し、具体的なコード例を示します。まず、JSON の Un について理解しましょう

PHP での ASCII 値の変換について簡単に学習します PHP での ASCII 値の変換について簡単に学習します Mar 28, 2024 pm 06:42 PM

PHP での ASCII 値の変換は、プログラミングでよく遭遇する問題です。 ASCII (American Standard Code for Information Interchange) は、文字を数値に変換するための標準エンコード システムです。 PHP では、ASCII コードを介して文字と数値の間で変換する必要があることがよくあります。この記事では、PHP で ASCII 値を変換する方法と具体的なコード例を紹介します。 1. キャラクターを変更する

Unicodeを中国語に変換する方法 Unicodeを中国語に変換する方法 Dec 14, 2023 am 10:57 AM

Unicode は、さまざまな言語や記号を表すために使用される文字エンコード標準です。 Unicode エンコードを中国語の文字に変換するには、Python の組み込み関数 chr() および ord() を使用できます。

Eclipseの中国語文字化け問題を解決する方法を試す Eclipseの中国語文字化け問題を解決する方法を試す Jan 03, 2024 pm 05:28 PM

Eclipseで中国語の文字化けに悩んでいませんか?これらのソリューションを試すには、特定のコード サンプルが必要です。 1. 背景の紹介 コンピューター技術の継続的な発展に伴い、ソフトウェア開発において中国語がますます重要な役割を果たしています。しかし、多くの開発者は、中国の開発に Eclipse を使用するとコードの文字化けの問題に遭遇し、作業効率に影響を及ぼします。次に、この記事では、一般的なコードの文字化けの問題をいくつか紹介し、読者が Eclipse での中国語の文字化けコードの問題を解決できるように、対応する解決策とコード例を示します。 2. 一般的なコード文字化けの問題と解決策ファイル

PHP チュートリアル: JSON Unicode を漢字に変換する方法 PHP チュートリアル: JSON Unicode を漢字に変換する方法 Mar 05, 2024 pm 06:36 PM

JSON (JavaScriptObjectNotation) は、Web アプリケーション間のデータ交換に一般的に使用される軽量のデータ交換形式です。 JSON データを処理するとき、Unicode でエンコードされた中国語の文字 (「u4e2du6587」など) が頻繁に発生するため、それらを読み取り可能な中国語の文字に変換する必要があります。 PHP では、いくつかの簡単なメソッドを通じてこの変換を実現できます。次に、JSONUnico を変換する方法を詳しく説明します。

PHP は文字列の最初の文字の ASCII 値を返します。 PHP は文字列の最初の文字の ASCII 値を返します。 Mar 21, 2024 am 11:01 AM

この記事では、PHP が返す文字列の最初の文字の ASCII 値について詳しく説明します。編集者が非常に実用的であると考えたので、参考として共有します。この記事を読んで何かを得ることができれば幸いです。 PHP は文字列の最初の文字の ASCII 値を返します はじめに PHP では、文字列の最初の文字の ASCII 値を取得することは、文字列処理と文字エンコーディングの基本的な知識を必要とする一般的な操作です。 ASCII 値は、コンピュータ システムで文字の数値を表すために使用され、文字の比較、データの送信、および保存に重要です。文字列の最初の文字の ASCII 値を取得するプロセスには、次の手順が含まれます。 文字列の取得: ASCII 値を取得する文字列を決定します。変数または文字列定数を指定できます

Java が MySQL データベースに接続するときに発生する一貫性のない Unicode 文字セット エンコーディングの問題を解決する Java が MySQL データベースに接続するときに発生する一貫性のない Unicode 文字セット エンコーディングの問題を解決する Jun 10, 2023 am 11:39 AM

ビッグ データやクラウド コンピューティングなどのテクノロジーの発展に伴い、データベースは企業情報化の重要な基盤の 1 つになりました。 Java で開発されたアプリケーションでは、MySQL データベースに接続することが標準になっています。ただし、このプロセスでは、一貫性のない Unicode 文字セットのエンコーディングという厄介な問題に遭遇することがよくあります。これは開発効率に影響を与えるだけでなく、アプリケーションのパフォーマンスと安定性にも影響します。この記事では、この問題を解決し、Java が MySQL データベースによりスムーズに接続できるようにする方法を紹介します。 1. ユニコード

See all articles