gsub 反斜杠以显示 unicode 字符

gsub a backslash to display a unicode character

我想 gsub u00E9 前面的反斜杠之一,这样它会打印 unicode 字符,在本例中是 e 并带有重音最佳。下面是我正在使用的代码,它不起作用。

array1 = [
  ["V\u00E9tiver (1978) ", "by L'Artisan Parfumeur", "12"],
  ["Time for Peace for Her (1999) ", "by Kenzo", "4"],
  ["Time for Peace for Him (1999) ", "by Kenzo", "7"], 
  [" Untitled (2009) ", "by Kenzo", "1"],
  [" Havana Vanille (2009) ", "by   L'Artisan Parfumeur", "10"]
]

array3 = array1.each do |s,a,r|
  puts s.gsub(/\/,"")
end

所以我想知道的是摆脱 array.I 中反斜杠之一的正确正则表达式,我认为上面的反斜杠应该是 enough.However,但事实并非如此。

您似乎不了解转义序列的工作原理。以这个字符串为例:

s = "V\u00E9tiver (1978)"

这里的\u00e9一个字符é的表示,而不是\ u 0 0 e 9的六字串。因此,如果您尝试替换它的任何部分(例如,"u"),您将失败,因为字符串中没有这样的字符。

s.gsub('u', 'U') # => "Vétiver (1978)"

而在你的字符串中

s2 = "V\u00E9tiver (1978) "

你的情况完全不同。这里的反斜杠不启动 unicode 转义序列,而是自己转义。这意味着以下字符 u00E9 只是字符串中的常规字符,而不是 unicode 代码点定义的一部分。

在我的脑海中,我不知道有什么方法可以将“\\u00E9”变成“\u00E9”(当然是缺少 eval)。相反,您应该做的是修复该数据的来源,这样它就不会重复转义序列。