C# 如何修复空白的UTF编码?

C# 如何修复空白的UTF编码?,c#,unicode,encoding,utf-8,ascii,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

在我的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动作”)正在返回-1,而我需要它返回1


如何修复字符串的编码?

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

194 160
无中断空间的UTF-8编码
码点(HTML调用的相同码点)

所以它实际上不是一个空间,尽管它看起来像一个。(例如,您将看到它不会自动换行。)与
\s
匹配的正则表达式将匹配它,但与空格的简单比较将不匹配

要简单地替换不间断空格,可以执行以下操作:

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

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

如何编写字符串替换函数?@omega:src=src.replace('\u00A0','');如何用普通空格替换非中断空格?@omega:src=src.replace('\u00A0','');