码迷,mamicode.com
首页 > 其他好文 > 详细

UTF-8编码的空格(194 160)问题

时间:2016-08-18 21:09:17      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:

在UTF-8编码里面存在一个特殊的字符,其编码是“0xC2 0xA0”,转换成字符的时候表现为一个半角空格,跟一般的半角空格(ASCII 0x20)不同的是它的宽度不会被压缩,所以排版中常能用到它。但是GB2312、Unicode之类并没有这样的字符,所以转换后前台会显示为“?”号,只是显示为问号而不是真正的问号,所以无法被替换!

 

 1         static void Main(string[] args)
 2         {
 3             var tmp1 = "j j j j j j j";
 4             var tmp2 = "j?j?j?j?j?j";
 5             byte[] o1 = Encoding.UTF8.GetBytes(tmp1);
 6             byte[] o2 = Encoding.UTF8.GetBytes(tmp2);
 7             Console.WriteLine("Normal Encoding.GetBytes: {0}", BitConverter.ToString(o1));
 8             Console.WriteLine("Special Encoding.GetBytes: {0}", BitConverter.ToString(o2));
 9             Console.ReadKey();
10         }

 

技术分享

 

 知道了这个原因之后,就好办了,写代码可以把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.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html

http://www.cnblogs.com/mingmingruyuedlut/archive/2012/07/04/2575180.html

http://www.cnblogs.com/yank/p/3529395.html

UTF-8编码的空格(194 160)问题

标签:

原文地址:http://www.cnblogs.com/hellolong/p/5785178.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!