我的文本编辑器(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 + 箭头选择它,你会知道你已经找到它,因为光标不会移动,只是变得更粗一点 :-)