UTF-8编码的空格(194 160)问题
前台的字符串传递到后台进行处理,发现了一个较诡异的问题:字符串中的一个空格(ASCII:32)被UTF-8编码之后变成了一个诡异的字符(ASCII:194 和 160的组合)!但在后台其表象还是空格。
在UTF-8编码里面存在一个特殊的字符,其编码是“0xC2 0xA0”,转换成字符的时候表现为一个半角空格,跟一般的半角空格(ASCII 0x20)不同的是它的宽度不会被压缩,所以排版中常能用到它。但是GB2312、Unicode之类并没有这样的字符,所以转换后前台会显示为“?”号,只是显示为问号而不是真正的问号,所以无法被替换!
对这两个看似相同的字符串进行一下转换可以确认:原始的字符串为:”#' %$ ()_ -{}.b“ 被转义后的字符串为:”#' %$ ()_ -{}.b“ 【注:双引号不算,转换为byte数组之后可以看到,原来的是16个字节,后来的那个是17个字节:这就是 32 --> 194 160 的结果】
string tmp1 = "#' %$ ()_ -{}.b";
string tmp2 = "#' %$ ()_ -{}.b";
byte[] o1 = Encoding.UTF8.GetBytes(tmp1);
byte[] o2 = Encoding.UTF8.GetBytes(tmp2);
知道了这个原因之后,就好办了,写代码可以把194 和 160 的组合转换回去。程序(C#)如下所示:

private string ChangeUTF8Space(string targetStr)
{
try
{
string currentStr = string.Empty;
byte[] utf8Space = new byte[] { 0xc2, 0xa0 };
string tempSpace = Encoding.GetEncoding("UTF-8").GetString(utf8Space);
currentStr = targetStr.Replace(tempSpace, " ");
return currentStr;
}
catch (Exception ex)
{
return targetStr;
}
}

更多的编码格式对照表可以看这篇文章:http://www.utf8-chartable.de/unicode-utf8-table.pl?utf8=dec
原主:http://www.cnblogs.com/mingmingruyuedlut/archive/2012/07/04/2575180.html
UTF-8编码的空格(194 160)问题的更多相关文章
- 异常空格,ASCII (194,160)问题
今天运营的同学反映有一些店铺的名称后面带空格,我下意识的说不可能啊,我已经处理过了啊.然后就找出来看. 其中有个店铺的名称是“安踏 ”,第一眼看上去好像是带了个空格.然后我就仔细的看了下. pry(m ...
- 从Java String实例来理解ANSI、Unicode、BMP、UTF等编码概念
转(http://www.codeceo.com/article/java-string-ansi-unicode-bmp-utf.html#0-tsina-1-10971-397232819ff9a ...
- URL编码,空格和+
下表中列出了一些URL特殊符号及编码 + URL 中+号表示空格 %2B 空格 URL中的空格可以用+号或者编码 %20 / 分隔目录和子目录 %2F ? 分隔实际的URL和参数 %3F % 指定特殊 ...
- Atitit.软件开发概念(11)--网络子系统--url编码 空格问题URLEncoder java js php
Atitit.软件开发概念(11)--网络子系统--url编码 空格问题URLEncoder java js php 1. RFC2396标准 including HTML 4.01 section ...
- 文字编码ASCII,GB2312,GBK,GB18030,UNICODE,UCS,UTF的解析
众所周知,一个文字从输入到显示到存储是有一个固定过程的,其过程为:输入码(根据输入法不同而不同)→机内码(根据语言环境不同而不同,不同的系统语言编码也不一样)→字型码(根据不同的字体而不同)→存储码( ...
- URLEncoder.encode编码空格变+号
今天调用rest接口的时候,使用URLEncoder编码将空格转为了+号,而rest接口方需要将空格转为%20,参照标准 之后用了不少在线的工具测试,有的将空格转为了+号,有的则是转为了%20.看了一 ...
- 字符集、字符编码、国际化、本地化简要总结(UNICODE/UTF/ASCII/GB2312/GBK/GB18030)
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 环境说明 普通的linux 和 普通的windows. ...
- php 去除变态空格字符方法,空格trim不掉问题解决思路
前言:今天过滤一段文本,后面有2个空格,用trim去不掉,用preg_match也去不掉,去网上翻阅了无数的方法,终于找到了非常好的一个解决方法.该文章来源于https://my.oschina.ne ...
- php preg_replace空格无法替换问题
一次坑爹的小bug.读取一段文字(编码utf-8),想替换掉空格,str_replace(" "..).preg_replace("/\s/"..)都不起作用. ...
随机推荐
- 如何利用BI实现人力资源可视化管理
随着通信行业改革的不断深化,行业的发展形势和生存环境正发生巨大变化,通信和信息的边界越来越模糊,市场竞争也随之愈演愈烈.近年来,某通讯运营商在业务的转型.网络的转型取得了巨大的突破,但人力资源管理的转 ...
- 移动端报表JS开发示例
最近对移动端的报表开发颇有研究,细磨精算了好久,虽然到现在还是“囊中羞涩”,但决定还是先抛砖引玉,拿点小干货出来和大家分享. 研究的工具是比较有代表性的FineReport. 1. 移动端哪些地方支 ...
- React Native 之 View使用
前言 学习本系列内容需要具备一定 HTML 开发基础,没有基础的朋友可以先转至 HTML快速入门(一) 学习 本人接触 React Native 时间并不是特别长,所以对其中的内容和性质了解可能会有所 ...
- 关于B树的一些总结
B树的定义 一棵m阶的B树满足下列条件: 树中每个结点至多有m个孩子. 除根结点和叶子结点外,其它每个结点至少有m/2个孩子. 根结点至少有2个孩子(如果B树只有一个结点除外). 所有叶结点在同一层, ...
- VS 母版使用配置技巧
采用web.config配置母版,方便母版的变更,处理方法: 1.在web.config配置如下内容: <configuration> <system.web> <pag ...
- 2、实现不同子网之间的信息交流(互相可以PING通)
一.环境: 二个不同的虚拟子网 VMnet1: 192.168.155.0/24 VMnet8: 192.168.170.0/24 编辑 --> 虚拟网络编辑器 (查看自己的子网,相应修改就行) ...
- js 页面无滚动条添加滚轮事件
当页面无滚动条时,滑动滚轮时window.onscroll事件不会相应,此时应该去添加滚轮事件 var MouseWheelHandler=function(e){ e.preventDefault( ...
- Practical oral English
1.如果你继续发烧,我就去请医生过来If your fever continues, I'll send for the doctor.2.在这么大的停车场里,我是永远都找不到我的车的I'll nev ...
- Android Studio导入github下载的project和module
前言:我们以前eclispe时代, 经常都是跑到github浏览第三方开源资源,然后下载下来,运行一下sample之类的,学习没有接触的第三方安卓库,但是到了Android Studio,在githu ...
- EXCEL中对1个单元格中多个数字求和
如A1=3779.3759.3769.3781.3750,A2对A1中4个数字求和怎么求!请高手赐教! 方法一:在B1中输入公式=SUM(MID(A1,{1,6,11,16,21},4)*1) 方法二 ...