我在数据库中有一个字符串,如\ 303 \ 255,代表í。
如何在í?
转换那8个字符表示我可以全部替换它们,但是没有其他方法吗?
答案 0 :(得分:1)
字符串中不是8个字符,它是2个字节。我不确定你想要的地方\ 303 \ 255出现在í但是如果你把
# encoding: utf-8
在.rb文件的顶部Ruby将使用UTF-8。
如果您使用的是Ruby on Rails,可以尝试将以下两行添加到config / environment.rb
Encoding.default_external = Encoding::UTF_8
Encoding.default_internal = Encoding::UTF_8
答案 1 :(得分:0)
假设问题确实如您所述,而不仅仅是误解。
我与此斗争。它不漂亮。这将解析字符串并使用pack
打包相关字节。
"foo \\303\\255 bar".gsub(/(\\\d{3})+/) do |match|
match[1..-1].split("\\").map{ |octet| octet.to_i(8) }.pack("c*")
end.force_encoding("UTF-8")
更短的版本使用eval
,但如果可以的话,总是值得尽量避免eval
,因为如果使用不当会带来巨大的安全风险。鉴于我们正在验证我们eval
在这里的格式,我会继续说这样做可能是安全的:
"foo \\303\\255 bar".gsub(/(\\\d{3})+/) { |m| eval('"' + m + '"') }