博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
网页UTF8转换GBK后出现问号"?"的原因
阅读量:2491 次
发布时间:2019-05-11

本文共 738 字,大约阅读时间需要 2 分钟。

网页UTF8转换GBK后出现问号"?"的原因

 网页编码转换是进行网页解析和处理的第一步。

互联网上越来越多的网页采用UTF-8编码,UTF-8用1到6个字节编码UNICODE字符,收录了超过10万个字符,BMP部分也有六万多个字符

 

而在进行编码转换时,我们往往需要转换为GBK编码进行后续处理,很多网页在转换后,会发现出现大量连续的问号:????????

这些恶心的问号是在编码转换阶段引入的,原因是:

 

GBK字符集只收录了两万多个字符,比UTF-8的字符数量少得多。

转化到GBK编码的时候,就会有编码落到GBK字符集以外,不能转化成GBK编码。这部分字符在转换之后的字符串中都变成了’?’

 

UTF-8:采用变长字节 (1 ASCII, 2 希腊字母和排版字符, 3 汉字等多字节东亚语言, 4 平面符号和特殊符号等),

其中双字节字符中有一些没有在GBK字符集中,通常来说UTF-8无法识别的字符都是非常生僻的字符,几乎难以遇到,可不用考虑;但有一个字符非常特殊:C2A0

 

C2A0是UTF8里的排版用空格(区别于ASI =20的空格),这个特殊的字符(unicode序号为0xA0),不在GBK字符集中。却频繁用于xml/html等格式的文件中。大量UTF-编码的网页使用这个字符用作占位的空格。而且不同浏览器对它的处理方式不同:IE浏览器识别出该符号并以空格显示,firefox则替换为xml转义字符   当网页中用C2A0进行文字排版时,我们对网页进行编码转换为GBK时就会出现很多"?"问号

 

一个简便的方案为,在网页转码前,进行过滤:

if(code_type == "UTF8")

{

   str = str.replace('C2A0', ' ');

}

 

 

 

转载地址:http://yjmrb.baihongyu.com/

你可能感兴趣的文章
多个DataSet数据合并
查看>>
事务的特性及事务的隔离级别(转)
查看>>
13 Tensorflow机制(翻译)
查看>>
访问修改属性日志
查看>>
与你相遇——博客园
查看>>
洛谷 1226 取余运算||快速幂
查看>>
深入理解OkHttp源码(二)——获取响应
查看>>
Vim中数字自增、自减
查看>>
进阶篇-安卓系统:2.多点触控的交互处理
查看>>
mybatis 2 -常用数据操作
查看>>
HDU6168 Numbers
查看>>
iscroll 4.0 滚动(水平和垂直)
查看>>
linux安装nagios客户端
查看>>
51nod 1040最大公约数和(欧拉函数)
查看>>
修改6S Fortran77 代码,建立查找表
查看>>
虚拟IP技术
查看>>
UIScrollView实现不全屏分页的小技巧
查看>>
spark 2.4安装
查看>>
Embeded linux之移植boa
查看>>
C之变量初始化的重要性
查看>>