如何修复空格的 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 160NO-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 编码?的主要内容,如果未能解决你的问题,请参考以下文章

如何在mysql中存取utf8mb4编码的字符

如何修复编码返回的 Youtube API 结果标题

如何修复 PHP XML 站点地图编码错误

如何对字符串进行URL编码

将数据库编码修复为 UTF8

如何修复/转换 Sublime Text 中的空格缩进?