如何在文本编辑器中删除多余的不可见字符

如何在文本编辑器中删除多余的不可见字符

我的文本编辑器(Sublime Text2 | Notepad++)中有两个“相同”的 5 个字符的字符串。

第一个字符串是从 Gmail 复制的,第二个字符串是手输入的。

当我选择第一个字符串时,我看到选择了 6 个字符。当我选择第二个字符串时,我看到选择了 5 个字符。

在此处输入图片描述

当我在 Sublime Text2 中同时选择两个字符串时,我可以看到在第一个字符串后面选择了一个额外的空格。

在此处输入图片描述

我在 Notepad++ 中启用了“显示所有字符”,但没有看到第一个字符串和第二个字符串之间有什么明显的区别。

该文件使用 UTF-8 编码。并且该问题在两个文本编辑器中都是一致的。

有人可以请教如何删除这个不可见的额外字符以及它来自哪里吗?

答案1

根据您获得的 ANSI 字符串gffk9​,文本中存在的附加字符似乎是零宽度空格。零宽度空格用于指示当文本实际上不包含空格时,显示文本的程序可以“安全”地换行的位置。由于您是从 Gmail 复制的,因此这很可能来自使用 HTML 格式化文本的电子邮件。

如何删除多余的字符可能取决于您的系统。这个十六进制查看器插件Sublime Text 看起来很有前途,因为它提供了一些搜索功能,但它没有明确提到通过十六进制字符串或替换进行搜索。由于您使用的是 Notepad++,我假设您使用的是 Windows。十六32将允许您在文件中搜索和替换十六进制字符串。

作为参考,如果你在类 Unix 环境中,sed可以使用本文描述的过程

无论如何,您要查找和替换的十六进制字符串是E2 80 8B

答案2

这在 sublime 3 中对我有用,无需使用十六进制编辑器。
使用常规搜索和替换。

  • 打开替换对话框 (Ctr + H)
  • 在“查找内容”中输入 Unicode 字符 U200B(*请参阅下面的提示)
  • 将“替换为”留空
  • 全部替换

/* 首先,要获取其中的 Unicode 字符,请使用操作系统的方法。

  • Windows - 按住 Alt 并输入 Unicode 代码
  • Linux - Ctrl + Shift + u,不释放 Ctrl 和 shift,输入代码
  • Linux 下的 Sublime - 与 Linux 类似,只不过它是 Ctrl + Alt +Shift。(Sublime 3 将 Ctrl + Shift + u 绑定为“软重做”)

另外,如果你知道字符在 Sublime 中的位置,你可以使用 shift + 箭头选择它,你会知道你已经找到它,因为光标不会移动,只是变得更粗一点 :-)

Sublime Text 中的 Unicode 组合

答案3

您还可以使用 hexdump -C 来查看奇怪的字符。检查用 .(点)标记的字符,它应该是空格。

在此处输入图片描述

相关内容