我们首先导入一个文件并在文件中为特殊的火山口我尝试编码方法并解码ruby并且没有任何反应,所以我使用了gsub。
像角色组Ì©
和̤
一样润泽
其余的问题都没有取代我。
这里方法替换
def replace_chars(name)
chars = {
"Ž" => 'é',
"Â" => "ç",
"‘" => "ë",
"â„¢" => "ô",
"̤" => "ç",
"Ì©" => "é",
"•" => "ï"
}
puts "before #{name}"
chars.each do |key,value|
name.gsub!(key,value)
end
puts "after #{name}"
end
如果我,但我的方法
replace_chars('̤liver Žponime')
这里放了方法的输出,第一个他没有成功改变这个词,但是在第二个他做了改变。
输出:after ÃŒç¤liver éponime
我不明白为什么他不想接受我的角色̤
和Ì©
。
答案 0 :(得分:2)
这是另一种解决方案,可以避免迭代所有字符并替换匹配。 @ Prashant4020是正确的,您需要在执行此操作之前按降序排序或至少按长度排序,因为Â
此时匹配并在̤
之前替换。
def replace_chars(name
chars = {
"̤" => "ç",
"Ì©" => "é",
"•" => "ï",
"â„¢" => "ô",
"Ž" => 'é',
"‘" => "ë",
"Â" => "ç"
}
#name.gsub!(/#{chars.keys.join('|')}/,chars)
#as suggested by @steenslag Regexp::union is definitely less of a hack
name.gsub!(Regexp.union(chars.keys),chars)
#translates to name.gsub!(/̤|Ì©"|•|â„¢|Ž|‘|Â/,{"̤" => "ç","Ì©"=>"é","•"=>"ï","â„¢"=>"ô","Ž"=>'é',"‘"=>"ë","Â"=>"ç"})
end
这将创建一个与chars
哈希中的键匹配的正则表达式,然后使用这些值替换键。这种方式gsub!
将不会被调用name
中根本不存在的密钥。
答案 1 :(得分:0)
用以下代码替换您的代码:
def replace_chars(name)
chars = {
"̤" => "ç",
"Ì©" => "é",
"•" => "ï",
"â„¢" => "ô",
"Ž" => 'é',
"‘" => "ë",
"Â" => "ç"
}
puts "before #{name}"
chars.each do |key,value|
name.gsub!(key,value)
end
puts "after #{name}"
end
replace_chars('̤liver Žponime')
before ̤liver Žponime
after çliver éponime