2010-12-11 7 views
2

UTF-8 문자로 String 메서드를 사용하려면 어떻게해야합니까?UTF-8 문자로 String 메서드를 사용하려면 어떻게해야합니까?

예를 들어 키릴 문자가있는 문자열이 있으므로 string.upcase을 사용하면 작동하지 않습니다.

+0

1.8 또는 1.9를 사용하는 경우 알려 주시면 인코딩 처리와 관련하여 동작이 1.9로 크게 변경되었습니다. 1.8의 문자열은 1.9에서 문자의 배열이었습니다. – Theo

답변

7

레일 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

키릴 문자로는 작동하지 않습니다. puts "ТОВА Е ТЕСТ".downcase => "ТОВА Е ТЕСТ" –

8

루비는 문자 AZ 및 – za의 경우 변환을 지원합니다.

그 이유는 다른 문자에 대한 변환이 잘 정의되어 있지 않기 때문입니다. 예를 들어, 터키어 'I'.downcase # => 'ı''i'.upcase # => 'İ'이지만 프랑스어는 'I'.downcase # => 'i''i'.upcase # => 'I'입니다. Ruby는 문자 인코딩뿐만 아니라 올바르게 수행 할 수있는 언어를 알아야합니다. , 당신은 실제로 텍스트를 이해할 필요가있다, 당신은 본격적인 AI가 필요합니다 즉 :

'MASSE'.downcase 

독일어

에서

더 나쁜는, 즉

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

중 하나가 입니다 사례 변환을 올바르게 수행합니다.

그리고 나는 실수로 한번 실수로 문장을 만들었는데, 이것은 사람을 위해서도 도 결정 불가능합니다..

간단히 말해서 올바르게 수행하는 것이 불가능하기 때문에 Ruby가 에 전혀 기입하지 않습니다.. 그러나 유니 코드 라이브러리 및 ActiveSupport와 같은 타사 라이브러리가 있습니다. 이 다소 큰 하위 집합을 지원합니다.

+0

İyi cevap, Jörg. –

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

불행히도 다른 게시물에 설명 된 문제 때문에 Ruby 1.9에서 downcase/upcase가 지원되지 않습니다. 그래도 키릴 문자에 대한 지원이 추가됩니다. 내 gem for Polish 볼 수 있습니다 - 같은 적절한 사례 폴딩 켜면 쉽게 : 그것은 또한 폴란드어에 대한 정렬 적절한 문자열을 제공

gem 'string_case_pl' 

.

관련 문제