转载自:http://huihua.iteye.com/blog/354189
在Eclipse中运行时一直都很正常,但是一旦导出成jar包时就出现错误,不能正确读取中文,试了很多办法都没有用。 什么new String(str.getBytes(), "UTF-8"); 和System.setProperty("file.encoding","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;
- }
-