在Eclipse中运行时一直都很正常,但是一旦导出成jar包时就出现错误,不能正确读取中文,试了很多办法都没有用。 什么new String(str.getBytes(), "UTF-8"); 和System.setProperty("file.encoding","UTF-8")都不顶用。
最后发现只要在读取文件内容的时候,把InputStreamReader写成下面这样即可。
通过打开文件是指定文件编码的方法把这个问题轻松的解决了。
最后总结一下:java要读取数据流的时候一定要指定数据流的编码方式(至少读取String流的时候要这么作。
输出文件内容时,转换一下成UTF-8编码,转换方式为:
最后发现只要在读取文件内容的时候,把InputStreamReader写成下面这样即可。
InputStreamReader read = new InputStreamReader(new FileInputStream(f),"UTF-8");
BufferedReader reader=new BufferedReader(read);
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
通过打开文件是指定文件编码的方法把这个问题轻松的解决了。
最后总结一下:java要读取数据流的时候一定要指定数据流的编码方式(至少读取String流的时候要这么作。
输出文件内容时,转换一下成UTF-8编码,转换方式为:
/**
* 中文转unicode
*
* @param str
* @return 反回unicode编码
*/
public static String chineseToUnicode(String str)
{
String result = "";
for (int i = 0; i < str.length(); i++)
{
int chr1 = (char)str.charAt(i);
if(chr1 > 0 && chr1 < 11 * 15)
{
result += str.charAt(i);
}
else if (chr1 <= 0 || chr1 >= 16 * 16 * 16)
{
result += "\\u" + Integer.toHexString(chr1);
}
else if (chr1 < 16 * 16 * 16 && chr1 >= 16 * 16)
{
result += "\\u0" + Integer.toHexString(chr1);
}
else if (chr1 < 16 * 16 && chr1 >= 11 * 15)
{
result += "\\u00" + Integer.toHexString(chr1);
}
}
return result;
}