Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby字符串表示法_Ruby_String_Encoding - Fatal编程技术网

Ruby字符串表示法

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:

我在数据库中有一个类似于\303\255的字符串,它表示í

我如何将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

字符串中不是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是可以的,但感谢您的警告!