在我的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…因为当我需要它返回1时,src.IndexOf("CLE action");
返回-1。
如何修复字符串的编码?
194 160
是NO-BREAK SPACE
码点的UTF-8编码(与HTML调用
的码点相同)。
所以它真的不是一个空格,尽管它看起来像。(例如,你会发现它不会换行。)对于s
的正则表达式匹配将会匹配它,但是与空格的普通比较则不会。
要简单地替换NO-BREAK空格,您可以这样做:
src = src.Replace('u00A0', ' ');
将xC2xA0
(= 194, 160
)解释为UTF8实际上会产生xA0
,它是unicode 不间断空格。这是一个不同于普通空间的字符,因此,与普通空间不匹配。
在UTF8中,字符值c2 a0(194 160)被定义为NO-BREAK SPACE。根据ISO/IEC 8859,这是一个不允许插入换行符的空格。通常,文本处理软件假定可以在任何空白字符处插入换行符(这就是通常实现换行的方式)。您应该能够简单地用正常的空格替换字符串中的字符来解决这个问题。