小小的汉字,大大的问题

今天同事在保存文件时,需要保存一个“元”字,这个文件有且只有一个汉字,发生了乱码。工程是UTF-8编码,文件格式要求是GBK。

于是就多做了几种测试,发现很有意思:

  1. 当有且只有一个“元”字时(其他字符或是数字,或是字母,下同),肯定会发生乱码。
  2. 当不是“元”,而是其他汉字时(非yuan这种发音),都不会发生乱码。
  3. 当所有都是“元”字时,也会发生乱码。

此问题尚未搞明白!

package net.bwda.Test;

import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;

public class StringTest {

    public static void main(String[] args) {
        String strTest1 = "元";
        String strTest2 = "和";
        String strTest3 = "元元元元元";
        String strTest4 = "缘";
        try {
            stringToFile(strTest1, "d:\\1.txt", "GBK");
            stringToFile(strTest2, "d:\\2.txt", "GBK");
            stringToFile(strTest3, "d:\\3.txt", "GBK");
            stringToFile(strTest4, "d:\\4.txt", "GBK");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public final static boolean stringToFile(String strContent, String strFilePath, String strCoding) {
        boolean blnResult = false;
        FileOutputStream fileOutputStream = null; // 文件输出对象
        Writer writer = null;
        try {
            fileOutputStream = new FileOutputStream(strFilePath);
            if (strCoding == null || strCoding.trim().length() <= 0) {
                writer = new OutputStreamWriter(fileOutputStream);
            } else {
                writer = new OutputStreamWriter(fileOutputStream, strCoding);
            }
            writer.write(strContent);
            writer.flush();
            writer.close();
            fileOutputStream.close();
            blnResult = true;
        } catch (Exception e) {
        } finally {
            writer = null;
            fileOutputStream = null;
        }
        return blnResult;
    }
}
View Code

 

 ----------------------------------------------------------------------------------------------------------------------------------

已经解决了。

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

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

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

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

-----------------------------------------------------------------------------------------------------------------------------------

2016-04-13 08:56:37 今天有网友回复说“联通”二字也是乱码。经测试也是如此,但是写字板打开不是乱码。

posted @ 2016-04-12 09:13  huiy_小溪  阅读(258)  评论(0编辑  收藏  举报