Java 文字エンコーディングの例の分析

PHPz
リリース: 2023-05-09 14:13:07
転載
1409 人が閲覧しました

1. Java ファイルはクラスを形成するためにコンパイルされます

ここでの Java ファイルのエンコーディングは多様である可能性がありますが、Java コンパイラーはエンコーディングに従ってこれらのエンコーディングを自動的に修正します。 Javaファイルの形式を読み込み、クラスファイルを生成しますが、ここでのクラスファイルのエンコードはUnicodeエンコード(具体的にはUTF-16エンコード)です。

したがって、Java コードで文字列を定義します。

String s="中国語文字";

Java ファイルで使用されるエンコーディングに関係なく、コンパイル前、コンパイル後、クラスの場合、それらはすべて同じであり、Unicode エンコーディングで表されます。

2. JVM でのエンコーディング

JVM がクラス ファイルをロードして読み取るとき、Unicode エンコーディングを使用してクラス ファイルを正しく読み取り、最初に定義された文字列を読み取ります。 s="漢字 ";メモリ内の表現は Unicode エンコードです。

String.getBytes() を呼び出すと、コード化けの原因が実際に発生します。このメソッドはプラットフォームのデフォルトの文字セットを使用して文字列に対応するバイト配列を取得するためです。中国語版 Windows の場合 異なるシステムやデータベースを複数回エンコードした場合、原理を理解していないとコードの文字化けが発生しやすくなります。したがって、システム内では文字列のエンコーディングを統一する必要があり、この統一を外部統一と言います。たとえば、メソッド文字列パラメータ、IO ストリーム、中国語システムでは、GBK、GB13080、UTF-8、UTF-16 などを使用できますが、使用される可能性のある文字を確実に使用できるように、より大きな文字セットを選択する必要があります。全て正常に表示でき、文字化けの問題も回避できます。 (すべてのファイルがASCIIコードであると仮定します) それでは双方向変換は不可能です。

UTF-8 はすべての中国語文字セット エンコーディングに対応しているわけではないことに注意してください。そのため、特殊な状況下では、UTF-8 を GB18030 に変換するときに文字化けが発生する可能性があります。ただし、愚かなグループがよくこれを行います。 . 中国のシステムは理由は説明できませんが、UTF-8 エンコーディングを使用することを好みます。最も愚かなことは、複数の人間が 1 つのシステムで作業することです。ソース コード ファイルに GBK エンコードを使用する人もいれば、UTF-8 を使用する人も、GB18030 を使用する人もいます。 FK、彼らは全員中国人であり、アウトソーシング プロジェクトではありません。なぜ UTF-8 を使用するのでしょうか? それはクレイジーです! ANT スクリプトのコンパイル時に認識されない文字エンコーディングを避けるために、すべてのソース コードに GBK18030 を使用しても問題ありません。

したがって、中国語システムの場合は、文字化けを最大限に回避するために、GBK または GB18030 エンコーディング (実際、GBK は GB18030 のサブセットです) を選択することが最善です。

3. メモリ内の文字列のエンコーディング

メモリ内の文字列は、クラス コードから直接読み込まれた文字列に限定されず、テキスト ファイルから読み取られる文字列もあります。データベースから読み取られるものもあれば、バイト配列から構築されるものもありますが、基本的には Unicode でエンコードされていません。理由は単純で、ストレージの最適化です。

したがって、処理する前に「ソース」のエンコードが明確であり、指定されたエンコード方式を使用してメモリに正しく読み込まれる必要があります。これがメソッドのパラメータである場合、このパラメータは別の日本語システムから渡される可能性があるため、文字列パラメータのエンコーディングは実際には明確である必要があります。文字列エンコードが明確な場合、文字化けを避けるために必要に応じて文字列を正しく処理できます。 文字列をデコードおよびエンコードするときは、次のメソッドを呼び出す必要があります:

public class Test {   public static void main(String[] args) {   System.out.println("当前JRE:" + System.getProperty("java.version"));   System.out.println("当前JVM的默认字符集:" + Charset.defaultCharset());   }   }
ログイン後にコピー

以上がJava 文字エンコーディングの例の分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート