Как использовать методы String для символов UTF-8? - PullRequest
2 голосов
/ 11 декабря 2010

Как использовать методы String для символов UTF-8?

Например, у меня есть строка с символами кириллицы, поэтому, когда я использую string.upcase, она не работает.

Ответы [ 4 ]

8 голосов
/ 11 декабря 2010

Ruby поддерживает только преобразования регистра букв A - Z и a - z.

Причина этого заключается просто в том, что преобразования регистра для других букв не определены четко. Например, на турецком 'I'.downcase # => 'ı' и 'i'.upcase # => 'İ', но на французском 'I'.downcase # => 'i' и 'i'.upcase # => 'I'. Ruby должен знать не только кодировку символов, но и язык, чтобы сделать это правильно.

Еще хуже, на немецком

'MASSE'.downcase

равно либо

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

Другими словами: вам действительно нужно понять текст, т. Е. Вам нужен полноценный ИИ, чтобы правильно преобразовывать регистры.

И я сам фактически однажды случайно построил предложение, которое было неразрешимо даже для человека .

Короче говоря: это просто невозможно сделать правильно, поэтому Ruby этого не делает вообще . Однако существуют сторонние библиотеки, такие как библиотека Unicode и ActiveSupport, которые do поддерживают несколько больший набор символов.

7 голосов
/ 11 декабря 2010

Рельсы active_support Драгоценный камень имеет расширения строки, которые могут справиться с этим.

Например:

# $ 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 ?"
0 голосов
/ 10 апреля 2012

К сожалению, в Ruby 1.9 нет поддержки downcase / upcase, поскольку проблемы описаны в других постах.Тем не менее, вы можете написать свой собственный гем, который добавит поддержку кириллицы.Вы можете посмотреть на мою жемчужину для польского - включить правильное сворачивание кейса так же просто, как:

gem 'string_case_pl'

Он также обеспечивает правильную сортировку строк для польского.

0 голосов
/ 10 апреля 2012
"ТЕКСТ".mb_chars.downcase # => "текст"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...