[转]UTF-8到GBK转码的特殊字符问题

news/2024/7/21 4:18:42 标签: 浏览器, firefox, java, ie, c
cle class="baidu_pl">
cle_content" class="article_content clearfix">
content_vclass="tags" href="/tags/IE.html" title=ie>iews" class="htmledit_vclass="tags" href="/tags/IE.html" title=ie>iews">

 

朋友开发的时候遇到一个问题࿰c;在过服务代理的时候࿰c;代理把UTF-8的中文编码强制给做成GBK的了࿰c;于是就开始了漫长的UTF-8到GBK的编码。感觉上很简单࿰c;但是就是发现在中文正常的文本后多了个 'x00'的尾巴。不得其解。

 

从网上看到有人分析࿰c;感觉还是蛮正确的࿰c;于是引用过来推荐给了朋友。

 

引自 http://www.dongliu.net/blog/post?action=vclass="tags" href="/tags/IE.html" title=ie>iew&postid=155141

 

Unicode字符集现在有超过10万个字符࿰c;其BMP部分也有六万多个字符;而GBK字符集只有两万以前多个字符。这样的话࿰c;从支持unicode字符集或者unicode字符集BMP的编码方式࿰c;转化到GBK编码的时候࿰c;就会有编码落到GBK字符集以外࿰c;不能转化成GBK编码。在class="tags" href="/tags/JAVA.html" title=java>java中࿰c;转换之后的字符串࿰c;这部分字符都变成了’?’。

通常这些都是非常生僻的字符࿰c;倒是可以不考虑;但是有一个特殊的unicode字符࿰c;不在GBK字符集中。却频繁用于xml/html等格式的文件中。这个字符unicode序号为0xA0࿰c;utf-8编码结果为C2A0࿰c;作用是一个排版空格——普通的ascii空格在xml/html中是被忽略的。大量UTF-编码的网页使用这个字符用作占位的空格。而且似乎class="tags" href="/tags/LiuLanQi.html" title=浏览器>浏览器对它的处理方式也不同:IE8class="tags" href="/tags/LiuLanQi.html" title=浏览器>浏览器会认得这个空格࿰c;class="tags" href="/tags/FIREFOX.html" title=firefox>firefox3.6简单的把它替换成 。当把一个utf-8编码的网页转成gbk编码时࿰c;这个字符就变成讨厌的问号了。

处理方法࿰c;就是在字符串以GBK编码写出之前࿰c;把这个字符替换掉:

str = str.replace('/u00A0', ' ');

彻底而保险的方法是过滤所有GBK不能表示的字符:

str = str.replaceAll("[^/u4E00-/u9FA5/u3000-/u303F/uFF00-/uFFEF/u0000-/u007F/u201c-/u201d]", " ");

 

 

cle>

http://www.niftyadmin.cn/n/1054895.html

相关文章

C++两个矩阵相乘

/*编程求两个矩阵相乘的结果。输入第一行是整数m,n,表示第一个矩阵式m行n列的;然后是一个m * n的矩阵。再下一行的输入时整数p,q,表示下一个矩阵p行,q列的(np);然后就是一个p行q列的矩阵。要求输出两个矩阵相乘的结果矩阵&#xf…

可重入锁和不可重入锁

不可重入锁: public class NoReentrantLock {private boolean isLocked false;public synchronized void lock() throws InterruptedException {while(isLocked) {wait();}System.out.println("NoReentrantLock.lock is locked");isLocked true;}public…

Multi-touch (MT) Protocol 小结

1, 两种多点触摸协议: A类: 处理无关联的接触: 用于直接发送原始数据; B类: 处理跟踪识别类的接触: 通过事件slot发送相关联的独立接触更新。2, 触摸协议的使用: A类协议…

[转]Linux TCP 连接数修改

看到一篇文章,还算可以。引自:http://nails.blog.51cto.com/640492/258977 一、 文件数限制修改(1) vi /etc/security/limits.conf* soft nofile 10240 * hard nofile 10240 (2) vi /etc/pam.d/loginsession required /lib/security/pam_limits.so 二、 网络端口限制…

java基础第三章

一、基本if结构 1、流程图 输入输出 判断和分支 流程线 1.1简单的if条件判断 if(表达式){ //表达式为true,执行{}中的代码 } 1.2简单的if条件判断 if(表达式){ //表达式为true,执行这里 }else{ //表达式为false,…

jieba分词

jieba分词用python编写,代码清晰,扩展性好,对jieba有改进的想法可以很容易的自己写代码进行魔改。 jieba分词的基本思路 jieba分词对已收录词和未收录词都有相应的算法进行处理,其处理的思路很简单,当然,过…

day6

# 今日内容:# 注意:selenium驱动的浏览器是干净的,没有任何缓存# 1、##### from selenium import webdriver## driver webdriver.Chrome(rD:\BaiduNetdisk\BaiduNetdiskDownload\chromedriver.exe)### try:# driver.implicitly_wait…

[转]用命令行限制网络连接数

感觉这样做不是最好的方法,也算是一种手段了。转自: http://www.linuxdiyf.com/viewarticle.php?id110061 当然也许有些场合不能公开限制P2P软件的使用,但网络现状又使得限制成为一种必要,这时就可以利用限制连接数来限制P2P软件的使用&…