项目中需要生成一个GBK文件,文件中只有一个汉字“元”,其余都是字母或数字。发现这个字出现了乱码,
经测试,只有strTest2不是乱码,其余均是乱码。貌似和发音还有点关系,请问如何才能正确输出一个“元”字?已经在网上试过了好多方法,例如utf-8转unicode,再转GBK,还有new String(strTest1.getBytes("GBK"),"GBK")等等。本工程是utf-8编码。
1 public class StringTest { 2 3 public static void main(String[] args) { 4 String strTest1 = "元"; 5 String strTest2 = "和"; 6 String strTest3 = "元元元元元"; 7 String strTest4 = "缘"; 8 try { 9 stringToFile(strTest1, "d:\\1.txt", "GBK"); 10 stringToFile(strTest2, "d:\\2.txt", "GBK"); 11 stringToFile(strTest3, "d:\\3.txt", "GBK"); 12 stringToFile(strTest4, "d:\\4.txt", "GBK"); 13 } catch (Exception e) { 14 // TODO Auto-generated catch block 15 e.printStackTrace(); 16 } 17 } 18 19 public final static boolean stringToFile(String strContent, String strFilePath, String strCoding) { 20 boolean blnResult = false; 21 FileOutputStream fileOutputStream = null; // 文件输出对象 22 Writer writer = null; 23 try { 24 fileOutputStream = new FileOutputStream(strFilePath); 25 if (strCoding == null || strCoding.trim().length() <= 0) { 26 writer = new OutputStreamWriter(fileOutputStream); 27 } else { 28 writer = new OutputStreamWriter(fileOutputStream, strCoding); 29 } 30 writer.write(strContent); 31 writer.flush(); 32 writer.close(); 33 fileOutputStream.close(); 34 blnResult = true; 35 } catch (Exception e) { 36 } finally { 37 writer = null; 38 fileOutputStream = null; 39 } 40 return blnResult; 41 } 42 }
已经解决了。
说明:上面代码生成的文件是没有问题的,只是在用UE或editplus打开时会出现乱码,但是用写字板打开就不是。
又做了这个试验,用UE和editplus新建一个文件,就写一个“元”字,保存后,关闭后重新打开该文件,也同样显示乱码。
写字板打开该文件不会出现乱码,正常显示文字。这说明保存的文字是可以被正确读取的。
于是就又写了段读文件的代码(GBK读取),发现也可以正常显示,OK!
这是因为写的纯文本,没有“格式", UE 或者 editplus 没有正确的解码,应该设置一下编码就可以了。
下面说的”联通“是因为”联通“的编码刚好是windows 记事本用于区分unicode 和 ansi 文本文件的标志,凑巧。
@James-yu: 谢谢回复!经测试,用UE或者 editplus设置正确编码也是不行了。
很久前就有人发现用windows的记事本写入“联通”二字,保存关闭,再打开,就出现乱码。
确实如此,但是用写字板打开不是乱码。
谢谢回复!