如何从文本中删除零宽度 space 字符 ‍

How to remove zero-width space characters ‍ from the text

我有包含 ‍ Zero width joiner 的文本,在 UI 中不可见,但是当我将其作为短信发送时,它显示为 ? 问题在iPhone.

中标记

我尝试使用 gsub 删除它,但没有被删除。

text.gsub("&zwj\;", "")

有什么方法可以从文本中删除这种不可见字符吗?


更新:

除了@matt的回答

Unicode 具有以下零宽字符:

要在文本中替换它们,您可以使用简单的正则表达式:

text = text.gsub(/[\u200B-\u200D\uFEFF]/, '')
"blah blah blah".gsub(/[^[:print:]]/, '')

应该删除所有不可打印的字符。

字符串 ‍ 是零宽度连接符的 HTML 字符实体。当 Web 浏览器看到它时,它会将其替换为实际的零宽度连接符,但就 Ruby 而言,它只是一个 5 个字符的字符串。

您要做的是指定实际 零宽度连接符。它有代码点 U+200D,所以你可以像这样使用它,使用 Ruby 的 Unicode 转义:

text.gsub("\u200D", "")

这应该删除零宽度连接字符,而不是查找您的原始代码正在执行的字符串 ‍