如何修复空格的UTF编码?

时间:2012-12-21 15:36:20

标签: c# unicode encoding utf-8 ascii

在我的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。

如何修复字符串的编码?

3 个答案:

答案 0 :(得分:21)

194 160NO-BREAK SPACE代码点的UTF-8编码(与HTML调用 相同的代码点)。

所以它真的不是一个空间,即使它看起来像一个。 (例如,你会发现它不会自动换行。)\s的正则表达式匹配会与之匹配,但与空格的简单比较则不会。

要简单地替换NO-BREAK空间,您可以执行以下操作:

src = src.Replace('\u00A0', ' ');

答案 1 :(得分:2)

\xC2\xA0(= 194, 160)解释为UTF8实际上会产生\xA0,这是unicode 非中断空间。这是与普通空间不同的字符,因此与普通空间不匹配。您必须匹配不间断的空格或对任何空格使用模糊匹配。

答案 2 :(得分:2)

在UTF8中,字符值c2 a0(194 160)被定义为NO-BREAK SPACE。根据ISO / IEC 8859,这是一个不允许插入断线的空间。通常,文本处理软件假定可以在任何空格字符处插入换行符(这是正常实现自动换行的方式)。你应该能够简单地用正常空格替换你的字符串来解决问题。