c# - 如何修复空格的 UTF 编码?

标签 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 .

如何修复字符串的编码?

最佳答案

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

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

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

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

关于c# - 如何修复空格的 UTF 编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13992934/

相关文章:

c# - DbContext 没有被 autofac 注入(inject)

python - input() 和文字 unicode 解析

amazon-web-services - 上传到S3的文本文件编码很奇怪?

c# - 重命名 ListView 中的项目 c# WinForms

c# - 使用 protobuf-net 进行质量过滤

c# - 我无法弄清楚为什么这个代码在与后台工作人员一起使用时会失败

java - 自动将特殊字符转换为 utf-8

Ruby 在 unicode 字符串中插入变量

PHP html 特殊字符编码不是实体而是十进制

video - 如何使用 FFmpeg 颜色空间选项