又是编码问题。。。

文件保存时的编码问题真头痛,用PHP的Json_encode编码时需要把中文的GBK转换为UTF-8,不然Json_decode解码后出来的是空的。不知怎么的把index.php那个文件的编码改成UTF-8了,这下好了,从别的php文件中下载这个文件里的内容,用Json_decode解码后出来的东西还是解码前的。。。找啊找啊,最后发现直接把index.php输出的东西复制到一个php文件里,在php文件里直接解码,结果正确了,用mb_detect_encoding()发现Json_decode只能解码ASCII编码的字符。。。

哎,编码问题就是这么烦啊,谁叫世界上不同的语言文字这么多呢。

百度百科里对我们常用的ANSI编码的解释。

———————————————-我是百度百科分割线———————————————–

ansi编码

  为使计算机支持更多语言,通常使用 0x80~0xFF 范围的 2 个字节来表示 1 个字符。比如:汉字 ‘中’ 在中文操作系统中,使用 [0xD6,0xD0] 这两个字节存储。当然对于ANSI编码而言,0x00~0x7F之间的字符,依旧是1个字节代表1个字符。这一点是ASNI编码与Unicode编码之间最大也最明显的区别。比如“A君是第131号”,在ANSI编码中,占用12个字节,而在Unicode编码中,占用16个字节。因为A和1、3、1这4个字符,在ANSI编码中只各占1个字节,而在Unicode编码中,是需要各占2个字节的。   不同的国家和地区制定了不同的标准,由此产生了 GB2312, BIG5, JIS 等各自的编码标准。这些使用 2 个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。在简体中文系统下,ANSI 编码代表 GB2312 编码,在日文操作系统下,ANSI 编码代表 JIS 编码。不同 ANSI 编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段 ANSI 编码的文本中。

关于ansi编码的BUG

  很多细心的人会发现,当新建文本文档只输入“联通”2字保存再打开时将是乱码。当txt文档中一切字符都在 C0≤AA≤DF 80≤BB≤BF 这个范围时,notepad都无法确认文档地格式,没有自动依照UTF-8格式来”Display”。 而”联通”就是C1 AA CD A8,刚好在上面地范围内,所以不能正常显现。记事本默认是以ANSI编码保存文本文档的,而正是这种编码存在的bug招致了上述怪现象。假如保存时选择Unicode、Unicode(big endian)、UTF-8编码就正常了。此外,假如以ANSI编码保存含有某些特别符号的文本文档,再次打开后符号也会变成英文问号。例如输入英文 this app can break 以ANSI编码保存也会变成乱码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注