検索
ホームページバックエンド開発PHPチュートリアル文字セットのエンコーディングである 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 までご連絡ください。
PHP:サーバー側のスクリプト言語の紹介PHP:サーバー側のスクリプト言語の紹介Apr 16, 2025 am 12:18 AM

PHPは、動的なWeb開発およびサーバー側のアプリケーションに使用されるサーバー側のスクリプト言語です。 1.PHPは、編集を必要とせず、迅速な発展に適した解釈言語です。 2。PHPコードはHTMLに組み込まれているため、Webページの開発が簡単になりました。 3。PHPプロセスサーバー側のロジック、HTML出力を生成し、ユーザーの相互作用とデータ処理をサポートします。 4。PHPは、データベースと対話し、プロセスフォームの送信、サーバー側のタスクを実行できます。

PHPとWeb:その長期的な影響を調査しますPHPとWeb:その長期的な影響を調査しますApr 16, 2025 am 12:17 AM

PHPは過去数十年にわたってネットワークを形成しており、Web開発において重要な役割を果たし続けます。 1)PHPは1994年に発信され、MySQLとのシームレスな統合により、開発者にとって最初の選択肢となっています。 2)コア関数には、動的なコンテンツの生成とデータベースとの統合が含まれ、ウェブサイトをリアルタイムで更新し、パーソナライズされた方法で表示できるようにします。 3)PHPの幅広いアプリケーションとエコシステムは、長期的な影響を促進していますが、バージョンの更新とセキュリティの課題にも直面しています。 4)PHP7のリリースなど、近年のパフォーマンスの改善により、現代の言語と競合できるようになりました。 5)将来的には、PHPはコンテナ化やマイクロサービスなどの新しい課題に対処する必要がありますが、その柔軟性とアクティブなコミュニティにより適応性があります。

なぜPHPを使用するのですか?利点と利点が説明されましたなぜPHPを使用するのですか?利点と利点が説明されましたApr 16, 2025 am 12:16 AM

PHPの中心的な利点には、学習の容易さ、強力なWeb開発サポート、豊富なライブラリとフレームワーク、高性能とスケーラビリティ、クロスプラットフォームの互換性、費用対効果が含まれます。 1)初心者に適した学習と使用が簡単。 2)Webサーバーとの適切な統合および複数のデータベースをサポートします。 3)Laravelなどの強力なフレームワークを持っています。 4)最適化を通じて高性能を達成できます。 5)複数のオペレーティングシステムをサポートします。 6)開発コストを削減するためのオープンソース。

神話を暴く:PHPは本当に死んだ言語ですか?神話を暴く:PHPは本当に死んだ言語ですか?Apr 16, 2025 am 12:15 AM

PHPは死んでいません。 1)PHPコミュニティは、パフォーマンスとセキュリティの問題を積極的に解決し、PHP7.xはパフォーマンスを向上させます。 2)PHPは最新のWeb開発に適しており、大規模なWebサイトで広く使用されています。 3)PHPは学習しやすく、サーバーはうまく機能しますが、タイプシステムは静的言語ほど厳格ではありません。 4)PHPは、コンテンツ管理とeコマースの分野で依然として重要であり、エコシステムは進化し続けています。 5)OpcacheとAPCを介してパフォーマンスを最適化し、OOPと設計パターンを使用してコードの品質を向上させます。

PHP対Pythonの議論:どちらが良いですか?PHP対Pythonの議論:どちらが良いですか?Apr 16, 2025 am 12:03 AM

PHPとPythonには独自の利点と短所があり、選択はプロジェクトの要件に依存します。 1)PHPは、Web開発に適しており、学習しやすく、豊富なコミュニティリソースですが、構文は十分に近代的ではなく、パフォーマンスとセキュリティに注意を払う必要があります。 2)Pythonは、簡潔な構文と学習が簡単なデータサイエンスと機械学習に適していますが、実行速度とメモリ管理にはボトルネックがあります。

PHPの目的:動的なWebサイトの構築PHPの目的:動的なWebサイトの構築Apr 15, 2025 am 12:18 AM

PHPは動的なWebサイトを構築するために使用され、そのコア関数には次のものが含まれます。1。データベースに接続することにより、動的コンテンツを生成し、リアルタイムでWebページを生成します。 2。ユーザーのインタラクションを処理し、提出をフォームし、入力を確認し、操作に応答します。 3.セッションとユーザー認証を管理して、パーソナライズされたエクスペリエンスを提供します。 4.パフォーマンスを最適化し、ベストプラクティスに従って、ウェブサイトの効率とセキュリティを改善します。

PHP:データベースとサーバー側のロジックの処理PHP:データベースとサーバー側のロジックの処理Apr 15, 2025 am 12:15 AM

PHPはMySQLIおよびPDO拡張機能を使用して、データベース操作とサーバー側のロジック処理で対話し、セッション管理などの関数を介してサーバー側のロジックを処理します。 1)MySQLIまたはPDOを使用してデータベースに接続し、SQLクエリを実行します。 2)セッション管理およびその他の機能を通じて、HTTPリクエストとユーザーステータスを処理します。 3)トランザクションを使用して、データベース操作の原子性を確保します。 4)SQLインジェクションを防ぎ、例外処理とデバッグの閉鎖接続を使用します。 5)インデックスとキャッシュを通じてパフォーマンスを最適化し、読みやすいコードを書き、エラー処理を実行します。

PHPでのSQL注入をどのように防止しますか? (準備された声明、PDO)PHPでのSQL注入をどのように防止しますか? (準備された声明、PDO)Apr 15, 2025 am 12:15 AM

PHPで前処理ステートメントとPDOを使用すると、SQL注入攻撃を効果的に防ぐことができます。 1)PDOを使用してデータベースに接続し、エラーモードを設定します。 2)準備方法を使用して前処理ステートメントを作成し、プレースホルダーを使用してデータを渡し、メソッドを実行します。 3)結果のクエリを処理し、コードのセキュリティとパフォーマンスを確保します。

See all articles

ホット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ヘンタイを無料で生成します。

ホットツール

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 Mac版

SublimeText3 Mac版

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