gsub一个反斜杠来显示一个unicode字符

时间:2015-10-04 20:22:15

标签: ruby regex unicode backslash

我想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

所以我想知道的是正确的正则表达式来摆脱数组中的一个反斜杠。我以为我上面的那个就足够了。但是不是。

1 个答案:

答案 0 :(得分:1)

您似乎无法理解转义序列的工作原理。拿这个字符串,例如:

private static void Ajout(Etudiant pObjEtud)

{
    conn=DBHelper.getConnection();
    DBHelper.executeUpdate("INSERT into etudiant(cin,nom,prenom,datenaissance,adresse,mail,tel) VALUES("+pObjEtud.getCin()+","+pObjEtud.getNom()+","+pObjEtud.getPrenom()+","+pObjEtud.getDatenaissance()+","+pObjEtud.getAdresse()+","+pObjEtud.getMail()+","+pObjEtud.getTel()+")");
    DBHelper.close();


}

这里的s = "V\u00E9tiver (1978)" 代表一个字符\u00e9,而不是六个字符串é。所以,如果你试图替换它的任何部分(比如说“你”),你就会失败,因为字符串中没有这样的字符。

\ u 0 0 e 9

而在你的字符串中

s.gsub('u', 'U') # => "Vétiver (1978)"
你有完全不同的情况。这里反斜杠不会启动unicode转义序列,而是自行转义。这意味着以下字符s2 = "V\\u00E9tiver (1978) " 只是字符串中的常规字符,而不是unicode代码点定义的一部分。

在我的脑海中,我不知道如何将“\\ u00E9”变成“\ u00E9”(当然不是u00E9)。您应该做的是修复该数据的来源,以便它不会双重转义序列。