eclipseにおけるファイル格納の符号化フォーマットと符号化復号化の理解


1、windows->Preferences...開く「プリファレンス」ダイアログボックス、左側ナビゲーションツリー、general->Workspace、右側Text file encodingに移動し、Otherを選択してutf-8(小文字でなければならない)に変更し、その後、プロジェクトのプロパティダイアログボックスのText file encodingがUTF-8になります.
2、windows->Preferences…開く「プリファレンス」ダイアログボックス、左側ナビゲーションツリー、general->Content Types、右側Content Typesツリーに移動し、Textを開き、Java Source Fileを選択し、下のDefault encoding入力ボックスにUTF-8、点Updateを入力すると、JavaファイルをUTF-8にエンコードするように設定します.その後、jsp、js、cssなどのタイプのDefault encodingを設定し、Java Source Fileと同じように設定します.
3.windows->Preferences...「プリファレンス」ダイアログボックスを開き、左側のナビゲーションツリーをMyEclipse->Files and Editors->JSPに移動し、EncodingをUTF-8に変更
上には、私たちがコードを書くときにこれらのコードがどのようなフォーマットで格納されるかが設定されています.例えば、utf 8フォーマットに設定されていますが、コードが異なるシステムの下で実行されるのは、システム符号化スキームが異なるためです.だから文字化けしてしまう可能性もあります.JVMにおけるdefaultCharset()は、初期化段階でdefaultCharsetの初期化が呼び出され、一度だけ初期化され、JVMはまずfileを取る.Encodingで指定する文字セットは、取れない場合はシステムのデフォルト文字セット(例えばwindowsではGBK)を使用し、取れない場合はdefaultCharsetをUTF-8文字セットに設定し、defaultCharsetが初期化されると、defaultCharsetはJVMの後の実行中に変更できなくなります.例えば、JVMの起動後にプログラムでpropertiesを使用します.setProperty(“file.encoding”,”UTF-8”);defaultCharsetの値も変更されません.以上、この問題について説明しました.defaultCharsetの値を指定する場合は、JVM起動パラメータ(-Dfile.encoding="UTF-8")を使用して、このJVMを指定する文字セットを表示できます!!!このパラメータは,プログラム実行時の文字列符号化処理に影響する.
JAvaソースファイルはutf 8に符号化される.JVMの起動時にJVM文字セットパラメータが追加されました.eclipse起動時設定JVMパラメータ"-Dfile.encoding=UTF8" JVM起動運転時デフォルト符号化スキームを設定します.
cmd起動java -Dfile.encoding=UTF8 Encode
System.out.println("  ");

        System.out.println(Charset.defaultCharset().name());

        System.out.println(new String("  0".getBytes()));
        System.out.println(new String("  1".getBytes(), "utf8"));
        System.out.println(new String("  2".getBytes(), "GB2312"));

        System.out.println(new String("  3".getBytes(), "ISO8859_1"));

        System.out.println(new String("  4".getBytes("GB2312")));

        System.out.println(new String("  5".getBytes("GB2312"), "GB2312"));
        System.out.println(new String("  6".getBytes(), "GBK"));
        System.out.println(new String("  7".getBytes("GBK"), "GBK"));
        System.out.println(new String("  8".getBytes(), "GB18030"));
        System.out.println(new String("  1".getBytes("GB18030"), "GB18030"));
        System.out.println(new String("  ".getBytes("GB2312"), "ISO8859_1"));

        System.out.println(new String("  ".getBytes("ISO8859_1")));

        System.out.println(new String("  ".getBytes("ISO8859_1"), "GB2312"));

        System.out.println(new String("  ".getBytes("ISO8859_1"), "ISO8859_1"));
        String gb = new String("  2312".getBytes("gbk"), "gbk");
        System.out.println(gb);
        System.out.println(Charset.defaultCharset().name());
        System.out.println(System.getProperty("file.encoding"));
        Properties properties = System.getProperties();
        properties.setProperty("file.encoding", "GBK");
        System.out.println(System.getProperty("file.encoding"));
        System.out.println(Charset.defaultCharset().name());

出力結果:
  
UTF-8
  0
  1
 ���2
中æ3
����4
  5
  6
  7
  8
  1
ÖÐÎÄ
??
??
??
  2312
UTF-8
UTF8
GBK
UTF-8

上のgetBytesメソッドは、文字列を1バイト配列に符号化し、文字セットを指定しない場合、Charset.defaultCharset().name()の符号化セットを使用して文字列を符号化します.new String(byte[] bytes ,Charset charset);ここでは、charset文字セットを用いて1バイト配列データを一連の文字列に復号することに関する.charsetパラメータを指定しない場合、復号文字セットはデフォルトで使用されます(Charset.defaultCharset().name()で返される文字セット)
したがって、中国語2の中国語3の出力文は、システムのデフォルトの文字セットで符号化され(私のシステムはutf 8)、utf 8で復号するのではなく、指定された符号化セットで復号されるため、文字化が乱れるに違いない.中国語4は、指定された符号化セット符号化で1バイト配列を構築するが、バイト配列で1文字列を構築する際に復号文字セットにシステムデフォルト文字セット(utf 8)を使用するため、乱符号化である.中国語6の原因は漢字をサポートしない符号化と復号化で一定の誤りである.あなたの符号化と復号が同じかどうかにかかわらず.
文字化けしを防ぐには
eclipse文字セットeclipse 3種類の符号化設定方式の影響範囲javaは、ある文字列がどのように符号化された行のコードであるかを判断することができる