首页 新闻 会员 周边 捐助

小小的汉字,大大的麻烦

0
悬赏园豆:100 [已解决问题] 解决于 2016-04-12 19:08
项目中需要生成一个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 }
huiy_小溪的主页 huiy_小溪 | 菜鸟二级 | 园豆:316
提问于:2016-04-12 09:34
< >
分享
最佳答案
0

已经解决了。

说明:上面代码生成的文件是没有问题的,只是在用UE或editplus打开时会出现乱码,但是用写字板打开就不是。

又做了这个试验,用UE和editplus新建一个文件,就写一个“元”字,保存后,关闭后重新打开该文件,也同样显示乱码。

写字板打开该文件不会出现乱码,正常显示文字。这说明保存的文字是可以被正确读取的。

于是就又写了段读文件的代码(GBK读取),发现也可以正常显示,OK!

huiy_小溪 | 菜鸟二级 |园豆:316 | 2016-04-12 19:06

这是因为写的纯文本,没有“格式", UE 或者 editplus 没有正确的解码,应该设置一下编码就可以了。

下面说的”联通“是因为”联通“的编码刚好是windows 记事本用于区分unicode 和 ansi 文本文件的标志,凑巧。

James-yu | 园豆:401 (菜鸟二级) | 2016-04-13 22:01

@James-yu: 谢谢回复!经测试,用UE或者 editplus设置正确编码也是不行了。

huiy_小溪 | 园豆:316 (菜鸟二级) | 2016-04-14 15:10
其他回答(1)
0

很久前就有人发现用windows的记事本写入“联通”二字,保存关闭,再打开,就出现乱码。

蔡大卫 | 园豆:204 (菜鸟二级) | 2016-04-12 20:13

确实如此,但是用写字板打开不是乱码。

谢谢回复!

支持(0) 反对(0) huiy_小溪 | 园豆:316 (菜鸟二级) | 2016-04-13 08:55
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册