ome*_*ega 14 c# unicode encoding ascii utf-8
在我的C#代码中,我从PDF文档中提取文本.当我这样做时,我得到一个UTF-8或Unicode编码的字符串(我不知道哪个).当我用Encoding.UTF8.GetBytes(src);它将它转换成字节数组时,我注意到空格实际上是两个字符值为194和160的字符.
例如,字符串"CLE action"看起来像
[67, 76, 69, 194 ,160, 65 ,99, 116, 105, 111, 110]
Run Code Online (Sandbox Code Playgroud)
在一个字节数组中,其中空格是194和160 ......因此,src.IndexOf("CLE action");当我需要它返回1时返回-1.
如何修复字符串的编码?
Ric*_*dle 21
194 160是NO-BREAK SPACE代码点的UTF-8编码(与HTML调用的代码点相同 ).
所以它真的不是一个空间,即使它看起来像一个.(例如,你会看到它不会自动换行.)正则表达式匹配\s会匹配它,但是与空格的简单比较不会.
要简单地替换NO-BREAK空间,您可以执行以下操作:
src = src.Replace('\u00A0', ' ');
Run Code Online (Sandbox Code Playgroud)
\xC2\xA0将(= )解释194, 160为 UTF8 实际上会产生\xA0is unicode non-break space。这是与普通空格不同的字符,因此与普通空格不匹配。您必须匹配不间断空格或对任何空格使用模糊匹配。