文字セットと符号化方式のテスト理解
1981 ワード
文字セットと符号化方式は2つの異なる概念であり、大体:文字セットは文字の集合であり、符号化方式は文字が具体的なバイナリに変換される規則である.
質問:
1つのファイルはGBKで符号化され、中国語の文字セットが書かれています.
ではUTF-8を使うとき、何に注意する必要がありますか?
興味深い小さなテストです
srcの下に2つのファイル、元のファイルを配置します
backそのコードはutf-8符号化に設定次のjavaコードもutf-8符号化、gbk-utf.txtそのファイルはGBKコードに設定して、勝手に漢字を打つ
1.コードを実行する--対応するbackファイルを見て、コードは問題なくて、漢字はすべて正常です
2.back符号化とjava符号化が一致せず、プログラムを実行し、効果を確認し、文字化を乱す
3.コードが一致している場合はgbkまたはutf-8がすべて正常であっても
結論:
これらの中国語文字セットはGBKに対応して下位層に格納されている具体的な2級制形式であり、UTF-8でこれらの2級制を使用するとUTF-8に対応する中国語文字に対応できないに違いない.
私達のjavaファイルの時UTF-8は符号化して、それではGBKは読み込んだ文字に従って、UTF-8の中で文字を増加します
最後の出力はどうなりますか?これらのUTF-8で表される文字を対応するファイルに二次的に出力します.このファイルの下部はもちろん二次的に表されるのでjavaコードの符号化形式で表示する必要があります.
質問:
1つのファイルはGBKで符号化され、中国語の文字セットが書かれています.
ではUTF-8を使うとき、何に注意する必要がありますか?
興味深い小さなテストです
srcの下に2つのファイル、元のファイルを配置します
backそのコードはutf-8符号化に設定次のjavaコードもutf-8符号化、gbk-utf.txtそのファイルはGBKコードに設定して、勝手に漢字を打つ
public class IOCharsetConvert {
public static void main(String[] args) throws Exception {
// , ,
String path="D:\\springdemo1.0\\src\\main\\java\\";
String fileNamePrimitive=path+"gbk-utf8.txt";
List<String> list=read(fileNamePrimitive, "GBK");
BackFile(path+"gbk-utf8-back.txt", list);
}
private static List<String> read(String fileName,String convertCharSet) throws Exception{
BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(fileName),convertCharSet));
List<String> sbuffer=new ArrayList<String>();
String str=null;
while((str=br.readLine()) != null){
sbuffer.add(str);
System.out.println("test-->>"+str);
}
br.close();
return sbuffer;
}
public static void BackFile(String backFileName,List<String> strbuffer) throws IOException{
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(backFileName)));
for(String str:strbuffer){
bw.write(str);
}
bw.flush();
bw.close();
}
}
1.コードを実行する--対応するbackファイルを見て、コードは問題なくて、漢字はすべて正常です
2.back符号化とjava符号化が一致せず、プログラムを実行し、効果を確認し、文字化を乱す
3.コードが一致している場合はgbkまたはutf-8がすべて正常であっても
結論:
これらの中国語文字セットはGBKに対応して下位層に格納されている具体的な2級制形式であり、UTF-8でこれらの2級制を使用するとUTF-8に対応する中国語文字に対応できないに違いない.
私達のjavaファイルの時UTF-8は符号化して、それではGBKは読み込んだ文字に従って、UTF-8の中で文字を増加します
最後の出力はどうなりますか?これらのUTF-8で表される文字を対応するファイルに二次的に出力します.このファイルの下部はもちろん二次的に表されるのでjavaコードの符号化形式で表示する必要があります.