在Ruby 1.8.7或1.9.2中编码

我一直在尝试使用不在1.9.2中构建的gem’字符编码’,但是在1.8.7中它确实如此,但即使我需要’encoding / character / utf-8’,我仍然无法做到最简单的编码。

require 'encoding/character/utf-8' str = u"hëllö" str.length #=> 5 str.reverse.length #=> 5 str[/ël/] #=> "ël" 

我明白了

 ruby-1.8.7-p302 > # encoding: utf-8 ruby-1.8.7-p302 > require 'encoding/character/utf-8' => nil ruby-1.8.7-p302 > str = u"hll" => u"hll" ruby-1.8.7-p302 > str.length => 3 ruby-1.8.7-p302 > #=> 5 ruby-1.8.7-p302 > str.reverse.length => 3 ruby-1.8.7-p302 > #=> 5 ruby-1.8.7-p302 > str[/l/] => "l" 

我的问题是,是否有一个非常好的编码库可以接受分配或可能所有不同的字符。 或者也许使用utf-16? 我已经尝试过“#encoding:utf-8”的魔法代码,它似乎也没有。 谢谢

我担心我不明白你的问题。 您是否遇到源代码文件问题? 我已经在控制台和ruby脚本(1.8.7)中尝试了它,它确实有效。

 require 'rubygems' require 'encoding/character/utf-8' str = u'hëllö' puts str.length puts str.reverse.length puts str[/ël/] 

并且输出按预期工作

 5 5 ël 

在Ruby 1.9+(我在1.9.2预览中测试过)中,您不需要库,因为标准库支持编码。 有关它的更多信息,请参阅此post 。 http://yehudakatz.com/2010/05/05/ruby-1-9-encodings-a-primer-and-the-solution-for-rails/

这没有c扩展,并且在1.8 / 1.9上,并非所有字符串方法都有效(但它们很容易添加)

https://github.com/grosser/string19

 require 'rubygems' require 'string19' String19('hëllö').length == 5