A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李建雄 黑马帝   /  2011-10-29 00:51  /  2322 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

看过视频的兄弟,回答一下这个问题:
新建一个文本文件,输入 联通  保存,关闭,再打开为什么 联通 没有了

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1

查看全部评分

5 个回复

倒序浏览
记事本默认是以ANSI存储的
而记事本打开时是Windows猜测文件二进制编码是什么编码格式,刚好“联”在UTF-8的范围内 所以就以UTF-8格式打开了
只要你保存时把编码从ANSI改为UTF-8就正常了。

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1

查看全部评分

回复 使用道具 举报
白倩 黑马帝 2011-10-29 12:02:33
藤椅
字符编码格式不同,记事本打开时将"联"猜测成UTF-8的编码,所以转换时就变成了乱码,你修改一下字符编码就可以了!

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1

查看全部评分

回复 使用道具 举报
绿影 黑马帝 2011-10-31 18:47:59
板凳
在记事本文件中输入“联通”两个字符或者”a联通”,保存,再次打开时确实乱码。原因就在于“联通”两个字符的GBK(中文系统默认字符编码)二进制格式偶然性的完全编码符合UTF-8的编码规范,在保存后,记事本再次打开检测时认为这是UTF-8字符,解码时自动调用UTF-8进行解码,导致乱码。如果在前面多写几个中文就不会出现这种情况。因为记事本根据前面的字符集判断是GBK的编码。

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 看过视频的人。

查看全部评分

回复 使用道具 举报
    这里涉及到不同编码表的问题,具体来说就是GBK和UTF-8这两个编码表间转换的问题。
    通常我们认为一个中文由两个字节组成,这是在GBK编码表。而UTF-8编码表中一个文字由3个字节组成。那么在读取汉字的时候,计算机读到的是我们保存汉字时被计算机转换的二进制数据。/*计算机在保存汉字的时候,会先将汉字转换成二进制保存。windows以GBK为基本汉字编码。*/然后通过编码表转化成汉字。问题就出现在这。
    我们先看看两个编码表的读取方式。
    GBK编码表是以一定的规则每读取两字节的数据就返回一个汉字,它的规律我们先不看。但我们的计算机中既然存在着多个编码表,那么各个编码表间读取数据的方法就会有一定的区分。
    UTF-8编码表中一个汉字由1-3个字节组成,有可能是由一个字节单独表示汉字,也有可能是2个字节表示一个汉字,3个字节也能表示汉字。所以这里面就有区分的方法,UTF-8是通过对二进制数据定义标识头信息来实现的。而这个定义的标识头信息就是产生这个联通问题的原因。
    UTF-8的规则如下:
        有这样的数据    0101-0100 1101-1010 1001-0100 1110-1110 1001-1010 1001-0100
    当二进制数是0开始的时候,这一个字节就表示一个汉字,读到0开头的数据,那么UTF-8就会将这个 0101-0100 当成一个汉字转换成汉字,而不管后面的字节是什么。
    当二进制数是110开始而后一个数是以10开始的时候,表示这个字节和下一个字节一起表示一个汉字。如读完 0101-0100后,读到了110开头的数据并且下一个字节是以10开头,那么UTF-8就会将这个字节和下一个字节 1101-1010 1001-0100 一起转换成汉字。
    当二进制数是1110开始并且下面两个字节都是以10开头的时候,表示这个字节和下两个字节一起表示一个汉字。。如读完 1101-1010 1001-0100 后,读到了110开头的数据,并且下面两个字节都是以10开头。那么UTF-8就会将这个字节和下两个字节 1110-1110 1001-1010 1001-0100 看成一组转换成汉字。
    好,下面进入正题。
    通过查GBK的编码表我们可以发现,"联通"这两个字的GBK编码为:
    联-->1100-0001 1010-1010
       通-->1100-1101 1010-1000
    这就是‘联通’特殊的地方,它们的GBK编码同样符合UTF-8的规则。保存联通开头的记事本时,以GBK的编码方法对‘联通’编码,当打开记事本对它解码时,直接就查了UTF-8的编码表,而UTF-8表中又没有这个数据,那么就出现了乱码。避免的方法就是在这两汉字的前面一定要有一个汉字出现。

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1

查看全部评分

回复 使用道具 举报
汉字有两种最常用的编码方式是gbk和utf-8,联通生成的二进制符合了utf-8的取标记的规则,记事本会按utf-8的编码方式打开,就出现了乱码,在前面写个汉字,就可以正常打开了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马