如何删除零宽度空格字符 ‍ 从文字

Sam*_*dhe 4 ruby string ruby-on-rails-4

我的文本包含‍ 零宽度连接符,该连接符在 UI​​ 中不可见,但是当我将其作为短信发送时,它?在 iPhone 中显示为问号。

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

text.gsub("&zwj\;", "")
Run Code Online (Sandbox Code Playgroud)

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


更新:

除了@matt的回答

Unicode 具有以下零宽度字符:

  • U+200B 零宽度空间
  • U+200C 零宽度非连接符 Unicode 代码点
  • U+200D 零宽度连接符 Unicode 代码点
  • U+FEFF 零宽度不间断空格 Unicode 代码点

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

text = text.gsub(/[\u200B-\u200D\uFEFF]/, '')
Run Code Online (Sandbox Code Playgroud)

mat*_*att 7

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

\n\n

你想要做的是指定实际的零宽度连接符。它的代码点为 U+200D,因此您可以像这样使用它,使用 Ruby\xe2\x80\x99s Unicode 转义:

\n\n
text.gsub("\\u200D", "")\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n