如何根据乱码现象来分析转码出错的原因
来源:互联网 发布:西安管家婆软件 编辑:程序博客网 时间:2024/06/05 20:32
如何根据乱码现象来分析转码出错的原因
中文乱码的问题是一个普遍遇到的问题,由于中西方编码方式的不同,单字节编码的方式在多字节编码的中文环境下经常会遇到转码后显示成“?”的问题,并且由于UTF-8,GBK,GB2312的差异也会导致一些莫名其妙的中文乱码出现。计算机环境下对字符串传输或存储需要经过先编码(编成字节流)后解码(转成字符串)的过程,因此,这么多种编码方式的并存,在编码和解码的过程中造成的乱码情况就会非常多。开发人员或许会根据经验处理其中的某几种情况,现场或用户更是一筹莫展,有没有办法根据现象来快速分析出出错的原因呢?或者总结出其中的规律?
以下以字符串“中*旻”为例,列举出经过常见编码方式两两组合进行转换的情形:
序号
编码方式
编码后的字节码
解码方式
解码后显示
1
UTF-8
-28 -72 -83 42 -26 -105 -69
UTF-8
中*旻
2
UTF-8
-28 -72 -83 42 -26 -105 -69
GBK
涓?*鏃?
3
UTF-8
-28 -72 -83 42 -26 -105 -69
GB2312
涓?*???
4
UTF-8
-28 -72 -83 42 -26 -105 -69
ISO-8859-1
???*???
5
GBK
-42 -48 42 -107 70
UTF-8
??*?F
6
GBK
-42 -48 42 -107 70
GBK
中*旻
7
GBK
-42 -48 42 -107 70
GB2312
中*?F
8
GBK
-42 -48 42 -107 70
ISO-8859-1
??*?F
9
GB2312
-42 -48 42 63
UTF-8
??*?
10
GB2312
-42 -48 42 63
GBK
中*?
11
GB2312
-42 -48 42 63
GB2312
中*?
12
GB2312
-42 -48 42 63
ISO-8859-1
??*?
13
ISO-8859-1
63 42 63
UTF-8
?*?
14
ISO-8859-1
63 42 63
GBK
?*?
15
ISO-8859-1
63 42 63
GB2312
?*?
16
ISO-8859-1
63 42 63
ISO-8859-1
?*?
表面上看来情形众多,没有头绪,其实有规可循:
首先,从表中可以看出只有UTF-8、UTF-8和GBK、GBK之间互转是没有问题的,其他都或多或少存在问题;
其次,使用单字节编码方式的“ISO-8859-1”是不能够用于中文的编码或解码的,只要有其参与的转换,都会出现“?”,因此如果出现一个汉字变成一个问号的情形,一般是错误的使用了类似“ISO-8859-1”的单字节编码方式对汉字进行了编码;
另外,由于UTF-8多使用三个字节来编码一个汉字,而GBK和GB2312使用两个字节,并且GB2312不能处理类似“旻”这样的生僻字,因此如果出现汉字变成没有问号的乱码或部分问号加汉字的情形,基本上可以断定是这三者之间的两两转换出了问题,建议在编码解码的过程中统一采用UTF-8或者GBK的方式。
- 转 如何根据乱码现象来分析转码出错的原因
- 如何根据乱码现象来分析转码出错的原因
- 根据内核打印的段错误信息分析驱动程序——根据出错PC来分析
- 根据内核打印的段错误信息分析驱动程序——根据出错PC来分析
- java中文乱码出错的另外原因
- 程序死机现象原因分析
- Belady现象的原因
- 一次exp导出出错的原因分析
- scrollToRowAtIndexPath出错原因分析
- cellForRowAtIndexPath出错原因分析
- bgsave出错原因分析
- 根据 GetLastError 来获取出错处理字符串的消息
- 邮件乱码产生的原因及其分析
- BS项目乱码的原因分析
- tomcat 下jsp乱码的原因分析
- 分析urllib.unquote乱码的原因
- Close_Wait现象产生的原因
- php乱码原因分析
- 黑马程序员——验证控件
- Tomcat Server启动超时的解决
- 《你所不知的OSG》第二章:OSG与GLSL(1)实现摇摆的树
- C语言中,int的最大值与最小值:
- VC++编程实现镜像劫持
- 如何根据乱码现象来分析转码出错的原因
- C#操作Word完全方法
- 在Flex4 Spark Application中设置图片背景解决方案汇总
- jQuery 表格展开伸缩
- HDU 3695 Computer Virus on Planet Pandora(AC自动机)
- c#读取Excel数据到Gridview
- HR报表开发基本流程
- JSP中
- Booki Objavi安装出错:SyntaxError和with语句有关