如何在UTF-8字符上使用String方法?

时间:2010-12-11 18:17:41

标签: ruby

如何在UTF-8字符上使用String方法?

例如,我有一个带有西里尔字符的字符串,因此当我使用string.upcase时,它不起作用。

4 个答案:

答案 0 :(得分:8)

Ruby仅支持字母A上的案例转换 - Za - z

这样做的原因很简单,就是其他字母的转换没有明确定义。例如,在土耳其语'I'.downcase # => 'ı''i'.upcase # => 'İ'中,但在法语'I'.downcase # => 'i''i'.upcase # => 'I'中。 Ruby不仅要知道字符编码,还要知道正确的语言。

更糟糕的是,用德语

'MASSE'.downcase

'maße'   # "measurements"
'masse'  # "mass"

换句话说:你需要实际理解文本,即你需要一个完整的AI来正确地进行大小写转换。

我自己实际上偶然构造了一个句子,即使对于一个人也是不可判断的

简而言之:它根本不可能正确完成,这就是为什么Ruby不能完全。但是,有第三方库,比如Unicode库和ActiveSupport,支持更大的字符子集。

答案 1 :(得分:7)

rails active_support gem具有可以处理此问题的字符串扩展名。

例如:

# $ sudo gem install activesupport
require 'active_support/core_ext/string'
'Laurent, où sont les tests ?'.mb_chars.upcase.to_s
# outputs => "LAURENT, OÙ SONT LES TESTS ?"

答案 2 :(得分:0)

"ТЕКСТ".mb_chars.downcase # => "текст"

答案 3 :(得分:0)

不幸的是,Ruby 1.9中没有对downcase / upcase的支持,因为其他帖子中描述的问题。你仍然可以写自己的宝石,这将增加对西里尔文的支持。您可以查看我的gem for Polish - 打开正确的案例折叠就像以下一样简单:

gem 'string_case_pl'

它还为波兰语提供了正确的字符串排序。