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

ada*_*axa 2 ruby

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

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

Jör*_*tag 8

Ruby仅支持字母上的大小写转换A- Za- z.

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

更糟糕的是,用德语

'MASSE'.downcase
Run Code Online (Sandbox Code Playgroud)

要么

'maße'   # "measurements"
'masse'  # "mass"
Run Code Online (Sandbox Code Playgroud)

换句话说:你需要真正理解文本,即你需要一个完整的AI,才能正确地进行大小写转换.

而且我自己实际上偶然构造了一个句子,即使对于一个人来说这也是不可判定.

简而言之:这是根本不可能正确地做,这就是为什么Ruby没有做到这一点在所有.有第三方库,但是,像Unicode的图书馆和的ActiveSupport,这支持字符稍大的子集.


tjw*_*ace 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 ?"
Run Code Online (Sandbox Code Playgroud)