Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.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 on rails Ruby 1.8.7(或Rails 2.x)中的String.force_encoding()_Ruby On Rails_Ruby_Encoding_Gem - Fatal编程技术网

Ruby on rails Ruby 1.8.7(或Rails 2.x)中的String.force_encoding()

Ruby on rails Ruby 1.8.7(或Rails 2.x)中的String.force_encoding(),ruby-on-rails,ruby,encoding,gem,Ruby On Rails,Ruby,Encoding,Gem,在Ruby 1.8.7(或Rails 2.x)中使用String.force_encoding()是否有一种解决方案,使其与Ruby 1.9中的工作方式类似?我读了一些关于requireactive\u support的文章,但这不起作用 $>gem列表--local | grep'rails\| activesupport' activesupport (3.0.3, 2.3.8, 2.3.5) rails (2.3.8, 2.3.5) $>ruby-v ruby 1.8.7 (2010

在Ruby 1.8.7(或Rails 2.x)中使用
String.force_encoding()
是否有一种解决方案,使其与Ruby 1.9中的工作方式类似?我读了一些关于require
active\u support
的文章,但这不起作用

$>gem列表--local | grep'rails\| activesupport'

 activesupport (3.0.3, 2.3.8, 2.3.5)
 rails (2.3.8, 2.3.5)
$>ruby-v

ruby 1.8.7 (2010-08-16 patchlevel 302) [i686-darwin10.4.0]
Rails 2.3.8
$>rails-v

ruby 1.8.7 (2010-08-16 patchlevel 302) [i686-darwin10.4.0]
Rails 2.3.8
内部评级:


在1.9中,
force_encoding
所做的唯一一件事是它更改了字符串的编码字段,而实际上并没有修改字符串的字节

Ruby 1.8没有字符串编码的概念,因此,
force_encoding
将是不可行的。如果您希望能够在1.8和1.9中运行相同的代码,您可以自己添加它:

class String
  def force_encoding(enc)
    self
  end
end
当然,为了使编码在1.8和1.9中的工作方式相同,您还需要做其他事情,因为它们处理这个问题的方式非常不同。

这将在Ruby 1.8.7和Ruby 1.9中为您提供字符串“到我的utf8”:

require 'iconv'
class String
  def to_my_utf8
    ::Iconv.conv('UTF-8//IGNORE', 'UTF-8', self + ' ')[0..-2]
  end
end
然后

?> "asdf".to_my_utf8
=> "asdf"

灵感来源于我的一些老作品。

出于好奇:为什么要添加两个空格,然后在转换后将其删除?这是Paul Battey的贡献。。。正如他所说,“危险的”字节是那些在194-253范围内的字节”。。。如果字符串以其中一个结尾,转换有时会失败。为什么需要rubygems?另外,您建议将顶层代码放在哪里?在每个控制器的控制器中,你都可以使用它吗?我想说,只要把require“iconv”放在某个地方一次,作为一种风格。说得好。。。我们不需要rubygems!这个解决方案似乎不能处理unicodeé字符,这是真的吗?可能是个愚蠢的问题,但我应该在代码中的什么地方添加这个?任何地方都可以,或多或少。将它放入一个文件中,并为该文件添加一个
require
,以及所有其他
require
s,放在“main”
.rb
的顶部。