在 java 中将 utf8 转换为 gb2312
Converting utf8 to gb2312 in java
看看下面的代码
try {
String str = "上海上海";
String gb2312 = new String(str.getBytes("utf-8"), "gb2312");
String utf8 = new String(gb2312.getBytes("gb2312"), "utf-8");
System.out.println(str.equals(utf8));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
打印错误!!!
我运行这段代码在jdk7和jdk8下都是,我IDE的代码风格是utf8。
谁能帮帮我?
String gb2312 = new String(str.getBytes("utf-8"), "gb2312");
这个说法是不正确的,因为字符串构造函数应该采用匹配的字节数组和字符集,你说字节是 utf-8 但字符集是 gb2312
当您 output/input.
时,您正在寻找的是 encoding/decoding
正如@kalpesh 所说,在内部,它都是 unicode。如果您想以特定编码读取流,然后将其写入不同的编码,则必须指定字节(在流中)和字符串(在 java 中)之间的转换编码,然后在字符串(在 java 中)到字节(输出流)之间,如下所示:
InputStream is = new FileInputStream("utf8_encoded_text.txt");
OutputStream os = new FileOutputStream("gb2312_encoded.txt");
Reader r = new InputStreamReader(is,"utf-8");
BufferedReader br = new BufferedReader(r);
Writer w = new OutputStreamWriter(os, "gb2312");
BufferedWriter bw = new BufferedWriter(w);
String s=null;
while((s=br.readLine())!=null) {
bw.write(s);
}
br.close();
bw.close();
os.flush();
当然,您仍然需要进行适当的异常处理以确保一切正常关闭。
看看下面的代码
try {
String str = "上海上海";
String gb2312 = new String(str.getBytes("utf-8"), "gb2312");
String utf8 = new String(gb2312.getBytes("gb2312"), "utf-8");
System.out.println(str.equals(utf8));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
打印错误!!!
我运行这段代码在jdk7和jdk8下都是,我IDE的代码风格是utf8。
谁能帮帮我?
String gb2312 = new String(str.getBytes("utf-8"), "gb2312");
这个说法是不正确的,因为字符串构造函数应该采用匹配的字节数组和字符集,你说字节是 utf-8 但字符集是 gb2312
当您 output/input.
时,您正在寻找的是 encoding/decoding正如@kalpesh 所说,在内部,它都是 unicode。如果您想以特定编码读取流,然后将其写入不同的编码,则必须指定字节(在流中)和字符串(在 java 中)之间的转换编码,然后在字符串(在 java 中)到字节(输出流)之间,如下所示:
InputStream is = new FileInputStream("utf8_encoded_text.txt");
OutputStream os = new FileOutputStream("gb2312_encoded.txt");
Reader r = new InputStreamReader(is,"utf-8");
BufferedReader br = new BufferedReader(r);
Writer w = new OutputStreamWriter(os, "gb2312");
BufferedWriter bw = new BufferedWriter(w);
String s=null;
while((s=br.readLine())!=null) {
bw.write(s);
}
br.close();
bw.close();
os.flush();
当然,您仍然需要进行适当的异常处理以确保一切正常关闭。