zoukankan      html  css  js  c++  java
  • 小小的汉字,大大的问题

    今天同事在保存文件时,需要保存一个“元”字,这个文件有且只有一个汉字,发生了乱码。工程是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 今天有网友回复说“联通”二字也是乱码。经测试也是如此,但是写字板打开不是乱码。

  • 相关阅读:
    学会数据库读写分离、分表分库
    MySql数据主从同步配置
    数据库事务的四大特性以及事务的隔离级别
    tensor维度变换
    本地存储,序列化与反序列化
    连连看项目实战之四(异步加载进度条)
    连连看项目实战之二(礼盒动画)
    连连看项目实战之三(解析配置表)
    连连看项目实战之一(搭建场景)
    设计模式(C#)——12责任链模式
  • 原文地址:https://www.cnblogs.com/huiy/p/5381347.html
Copyright © 2011-2022 走看看