如何修复空格的 UTF 编码?
Posted
技术标签:
【中文标题】如何修复空格的 UTF 编码?【英文标题】:How to fix UTF encoding for whitespaces? 【发布时间】:2012-12-09 04:46:11 【问题描述】:在我的 C# 代码中,我从 PDF 文档中提取文本。当我这样做时,我得到一个 UTF-8 或 Unicode 编码的字符串(我不确定是哪个)。当我使用Encoding.UTF8.GetBytes(src);
将其转换为字节数组时,我注意到空格实际上是两个字节值分别为 194 和 160 的字符。
例如字符串“CLE action”看起来像
[67, 76, 69, 194 ,160, 65 ,99, 116, 105, 111, 110]
在一个字节数组中,其中的空格是 194 和 160...因此,src.IndexOf("CLE action");
在我需要它返回 1 时返回 -1。
如何修复字符串的编码?
【问题讨论】:
【参考方案1】:194 160
是 NO-BREAK SPACE
代码点(与 html 调用  
相同的代码点)的 UTF-8 编码。
所以它真的不是一个空间,即使它看起来像一个。 (例如,您会看到它不会自动换行。)\s
的正则表达式匹配会匹配它,但与空格的简单比较则不会。
要简单地替换 NO-BREAK 空格,您可以执行以下操作:
src = src.Replace('\u00A0', ' ');
【讨论】:
如何用普通空格替换不间断空格? @omega: src = src.Replace('\u00A0', ' ');【参考方案2】:在 UTF8 字符值 c2 a0 (194 160) 中定义为 NO-BREAK SPACE。根据 ISO/IEC 8859,这是一个不允许插入换行符的空格。通常文本处理软件假定可以在任何空白字符处插入换行符(这是通常实现自动换行的方式)。您应该能够简单地用普通空格替换字符串中的字符来解决问题。
【讨论】:
字符串替换函数怎么写? @omega: src = src.Replace('\u00A0', ' ');【参考方案3】:将 \xC2\xA0
(=194, 160
) 解释为 UTF8 实际上会产生 \xA0
,这是 unicode 不间断空格。这是与普通空格不同的字符,因此与普通空格不匹配。您必须匹配不间断空格或对任何空格使用模糊匹配。
【讨论】:
以上是关于如何修复空格的 UTF 编码?的主要内容,如果未能解决你的问题,请参考以下文章