文字セット、エンコード方式、Javaプログラムの文字化け問題

目次

1. 文字コード

2. 3 つの主要な文字セットとエンコード方式

2.1、ASCII 文字セットとエンコード方式

2.2、GBK 文字セットとエンコード方式

2.3、Unicode 文字セットとエンコード方式

 3. プログラム文字化け問題


1. 文字コード

デジタル コンピュータのメモリはビットを保存できる唯一のメモリであるため、コンピュータで情報を処理したい場合は、ビットごとに保存する必要があります。テキストを数値として表すには、各文字に一意のコードを与えるシステムを構築する必要があります。数字と句読点もテキストの形式としてカウントされるため、独自のエンコーディングが必要です。

記号で表されるすべての文字と数字 (英数字) をエンコードする必要があります。この機能を備えたシステムをコード化文字セットと呼び、システム内の独立した個々のコードを文字コードと呼びます。1

2. 3 つの主要な文字セットとエンコード方式

2.1、ASCII 文字セットとエンコード方式

ASCII コードは広く使用されている文字エンコード標準であり、American Standard Code for Information Interchange (American Standard Code for Information Interchange) と呼ばれ、ASCII コードと呼ばれ、ASS キーのように発音されます。1967 年に正式に発表されて以来、コンピュータ業界で最も重要な標準となっています。

ASCII コードの文字セットには、英字、数字、句読点、特殊文字のマッピング関係のみが含まれており、漢字は含まれません。文字の数はコード ポイントと呼ばれ、対応するコード ポイントは (10 進数から 10 進数まで) エンコードされます。バイナリ - ASCII コードのエンコード方式)、バイナリ コードの格納に 1 バイトを使用し、ASCII コードの最初のビットは 0 です以下に示すように:

: ここには細かい詳細があります。アメリカ人がすべての文字をマップした後、最大のコード ポイントは 127 なので、それに対応するバイナリ エンコーディングは 1111111 で、これはわずか 7 ビットです。ただし、最小の記憶単位は文字列の下部にあることがわかっています。コンピュータはバイトなので、アメリカ人は 8 桁未満のコードの前にゼロを埋め込みます。そのため、127 に対応するコードは 01111111 になります。 

2.2、GBK 文字セットとエンコード方式

ここで注意すべきことは、GBK エンコーディングでは、中国語の文字は 2 バイトで格納され、文字と数字は依然として 1 バイトで格納されるということです。つまり、GBK 文字セットは ASCII 文字と互換性があります。セットです

2.3、Unicode 文字セットとエンコード方式

Unicode、ユニコード、ユニバーサルコードとも呼ばれ、学名は「Universal Multiple-Octet Coded Character Set」、略称UCSです。現在使用されているのは 2 バイトのエンコードである UCS-2 ですが、将来的に 2 バイトが不足しないようにするために開発されたのが UCS-4 です。

ASCII の 7 ビット エンコーディングと比較して、Unicode は現在 16 ビット エンコーディングを使用しており、各文字には 2 バイトが必要ですつまり、Unicode の文字エンコード範囲は 0000h ~ FFFFh で、合計 65,536 個の異なる文字を表現できます。世界中のすべての人間の言語、特にコンピューター通信で頻繁に使用される言語は、同じ符号化システムを使用でき、このシステムは拡張性にも優れています。

Unicode 文字セットに基づくエンコード方式には、utf-8、utf-16、utf-32 がありますが、ここでは utf-32 と utf-8 について簡単に説明します。

utf-32: このエンコード方式は、国際機関によって提案された最も古いエンコード方式ですが、各 Unicode 文字セット番号を保管するのに 4 バイトを使用するため、比較的役に立ちません。この保管方法は無駄です。保管スペースもアドレッシング速度に影響します。下図のように、01100001がエンコードされます。


UTF-8:

 3. プログラム文字化け問題

文字化けの問題は、エンコード方式とデコード方式が異なるために発生します。

Java は、文字列をデコードおよびエンコードするための String クラスのメソッドを提供します。

 ここでは、文字列「a I b」をエンコードおよびデコードしますが、最後に bytes1 をデコードすると、中国語の文字化けが発生することがわかりました。これは、GBK を使用したエンコードでは utf-8 デコードが使用されており、プラットフォームが utf によるデコードを提供しているためです。デフォルトでは-8なので文字化けが発生します。あとはコードを String s2 = new String(bytes1, "GBK"); に変更するだけで文字化けはなくなります。

このブログの文字セットとエンコード方法の紹介はここで終わります。このブログが役に立った場合は、「いいね!」をクリックしてサポートしてください。ありがとうございます。次のブログでお会いしましょう! 

おすすめ

転載: blog.csdn.net/weixin_64972949/article/details/131608361