Ruby字符串表示

时间:2011-09-29 10:39:48

标签: ruby string encoding

我在数据库中有一个字符串,如\ 303 \ 255,代表í。

如何在í?

转换那8个字符表示

我可以全部替换它们,但是没有其他方法吗?

2 个答案:

答案 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 + '"') }