Ruby字符串表示法
我在数据库中有一个类似于\303\255的字符串,它表示í 我如何将8个字符的表示转换为íRuby字符串表示法,ruby,string,encoding,Ruby,String,Encoding,我在数据库中有一个类似于\303\255的字符串,它表示í 我如何将8个字符的表示转换为í 我可以全部替换它们,但是没有其他方法吗?字符串中实际上不是8个字符,而是2个字节。我不确定您希望\303\255显示为I的位置,但如果您将 # encoding: utf-8 在.rb文件的顶部,Ruby将使用UTF-8 如果您使用的是RubyonRails,那么可以尝试将以下两行添加到config/environment.rb Encoding.default_external = Encoding:
我可以全部替换它们,但是没有其他方法吗?字符串中实际上不是8个字符,而是2个字节。我不确定您希望\303\255显示为I的位置,但如果您将
# encoding: utf-8
在.rb文件的顶部,Ruby将使用UTF-8
如果您使用的是RubyonRails,那么可以尝试将以下两行添加到config/environment.rb
Encoding.default_external = Encoding::UTF_8
Encoding.default_internal = Encoding::UTF_8
字符串中不是8个字符,而是2个字节。我不确定您希望\303\255显示为I的位置,但如果您将
# encoding: utf-8
在.rb文件的顶部,Ruby将使用UTF-8
如果您使用的是RubyonRails,那么可以尝试将以下两行添加到config/environment.rb
Encoding.default_external = Encoding::UTF_8
Encoding.default_internal = Encoding::UTF_8
假设问题真的如你所描述的那样,而不仅仅是误解 我为此奋斗。这不漂亮。这将解析字符串并使用
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
,因为如果使用不当,它会带来巨大的安全风险。鉴于我们正在验证我们在这里评估的内容的格式,我将继续说,这样做可能是安全的:
"foo \\303\\255 bar".gsub(/(\\\d{3})+/) { |m| eval('"' + m + '"') }
假设问题真的如你所描述的那样,而不仅仅是误解 我为此奋斗。这不漂亮。这将解析字符串并使用
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
,因为如果使用不当,它会带来巨大的安全风险。鉴于我们正在验证我们在这里评估的内容的格式,我将继续说,这样做可能是安全的:
"foo \\303\\255 bar".gsub(/(\\\d{3})+/) { |m| eval('"' + m + '"') }
您的意思是您有字符串:
str=“\”\\303\\255\”
(即斜杠确实在字符串中?)。您必须将它们提取出来,并将它们打包成真实的字符(如果是)。Ruby 1.8.x或Ruby 1.9.x有问题吗?在1.9.x中,@JonasElfström的解决方案应该足够了。您的意思是您有字符串:str=“\”\\303\\255\”
(即,斜线确实在字符串中?)。您必须将它们提取出来,并将它们打包成真实的字符(如果是)。Ruby 1.8.x或Ruby 1.9.x有问题吗?在1.9.x中,@JonasElfström的解应该足够了。eval正在工作!将检查为什么第一个操作系统不工作。。。谢谢你,伙计确保你只评估你知道是安全的字符串,否则(如果你发现自己陷入混乱)。我的代码还可以,但是eval
'在可能工作的情况下,对整个字符串进行求值将是危险的。这是内部和私有数据转换,因此在这方面使用eval是可以的,但感谢您的警告!评估开始了!将检查为什么第一个操作系统不工作。。。谢谢你,伙计确保你只评估你知道是安全的字符串,否则(如果你发现自己陷入混乱)。我的代码还可以,但是eval
'在可能工作的情况下,对整个字符串进行求值将是危险的。这是内部和私有数据转换,因此在这方面使用eval是可以的,但感谢您的警告!