黑马程序员技术交流社区

标题: DataOutputStream与编码 [打印本页]

作者: 禅伤    时间: 2014-8-4 10:25
标题: DataOutputStream与编码
代码如下:private static void writeUtf() throws IOException {
                DataOutputStream dos = new DataOutputStream(new FileOutputStream(
                                "f:\\data1.txt"));
                dos.writeUTF("你好");
                dos.close();
        }
        private static void writeU8Data() throws IOException {
                OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(
                                "f:\\data2.txt"), "utf-8");
                osw.write("你好");
                osw.close();
        }
        private static void writeGbkData() throws IOException {
                OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(
                                "f:\\data3.txt"), "gbk");
                osw.write("你好");
                osw.close();
        }

结果:
data1.txt      8字节
data2.txt      6字节
data3.txt      4字节

问:一个汉字不都是占两个字节吗,为何会产生如此差异?

作者: fantacyleo    时间: 2014-8-4 10:34
占几个字节跟编码有关。gbk的汉字2个字节,utf-8的汉字就是3个字节的
作者: 禅伤    时间: 2014-8-4 11:48
fantacyleo 发表于 2014-8-4 10:34
占几个字节跟编码有关。gbk的汉字2个字节,utf-8的汉字就是3个字节的

还有一个占4个字节的呢
作者: fantacyleo    时间: 2014-8-4 11:50
禅伤 发表于 2014-8-4 11:48
还有一个占4个字节的呢

也正常啊。那是所谓的Modified UTF-8




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2