반응형
Ruby 1.9 : 멀티 바이트 문자열을 올바르게 업 케이스 및 다운 케이스하려면 어떻게해야합니까?
그래서 matz는 루비 1.9.1 을 유지 upcase
하고 downcase
제한하기 /[A-Z]/i
로 결정했습니다 .
ActiveSupport::Multibyte
오랫동안 루비 1.8.x에서 String#mb_chars
.
그러나 루비 1.9.1에서 시도했을 때 작동하지 않는 것 같습니다. 다음은 내가 작성한 출력과 함께 작성한 간단한 테스트 스크립트입니다.
$ cat test.rb
# encoding: UTF-8
puts("@ #{RUBY_VERSION} " + (__ENCODING__ rescue $KCODE).to_s)
sd, su = "Iñtërnâtiônàlizætiøn", "IÑTËRNÂTIÔNÀLIZÆTIØN"
def ps(u, d, k); puts "%-30s: %24s / %-24s" % [k, u, d] end
ps sd.upcase, su.downcase, "Plain ruby"
require 'rubygems'; require 'active_support'
ps sd.upcase, su.downcase, "With active_support"
ps sd.mb_chars.upcase.to_s, su.mb_chars.downcase.to_s, "With active_support mb_chars"
$ ruby -KU test.rb
@ 1.8.7 UTF8
Plain ruby : IñTëRNâTIôNàLIZæTIøN / iÑtËrnÂtiÔnÀlizÆtiØn
With active_support : IñTëRNâTIôNàLIZæTIøN / iÑtËrnÂtiÔnÀlizÆtiØn
With active_support mb_chars : IÑTËRNÂTIÔNÀLIZÆTIØN / iñtërnâtiônàlizætiøn
$ ruby1.9 test.rb
@ 1.9.1 UTF-8
Plain ruby : IñTëRNâTIôNàLIZæTIøN / iÑtËrnÂtiÔnÀlizÆtiØn
With active_support : IñTëRNâTIôNàLIZæTIøN / iÑtËrnÂtiÔnÀlizÆtiØn
With active_support mb_chars : IñTëRNâTIôNàLIZæTIøN / iÑtËrnÂtiÔnÀlizÆtiØn
그렇다면 어떻게 국제화 upcase
되고 downcase
루비 1.9.1을 사용합니까?
최신 정보
나는 또한 현재에서 ActiveSupport 테스트 것을 추가해야합니다 master
, 2-3-*
그리고 3-0-unstable
GitHub의에서 가지를 레일. 같은 결과.
대소 문자 변환은 로케일에 따라 다르며 항상 왕복하지 않으므로 Ruby 1.9에서는이를 다루지 않습니다 ( 여기 및 여기 참조 ).
유니 코드 - UTIL 보석은 당신의 요구를 충족해야한다.
Google에서 오는 모든 사용자 ruby upcase utf8
:
> "your problem chars here çöğıü Iñtërnâtiônàlizætiøn".mb_chars.upcase.to_s
=> "YOUR PROBLEM CHARS HERE ÇÖĞIÜ IÑTËRNÂTIÔNÀLIZÆTIØN"
해결책은 mb_chars
.
선적 서류 비치:
- https://www.rubydoc.info/gems/activesupport/String#mb_chars-instance_method
- https://api.rubyonrails.org/classes/ActiveSupport/Multibyte/Chars.html
대소 문자 변환은 복잡하고 로케일에 따라 다릅니다. 다행히 Martin Dürst 는 Ruby 2.4에 전체 유니 코드 대소 문자 매핑 을 추가했습니다 .
puts RUBY_DESCRIPTION
sd, su = "Iñtërnâtiônàlizætiøn", "IÑTËRNÂTIÔNÀLIZÆTIØN"
def ps(u, d, k); puts "%-30s: %24s / %-24s" % [k, u, d] end
ps sd.upcase, su.downcase, "Ruby 2.4 (default)"
ps sd.upcase(:ascii), su.downcase(:ascii), "Ruby 2.4 (ascii)"
ps sd.upcase(:turkic), su.downcase(:turkic), "Ruby 2.4 (turkic)"
ps sd.upcase(:lithuanian), su.downcase(:lithuanian), "Ruby 2.4 (lithuanian)"
ps "-", su.downcase(:fold), "Ruby 2.4 (fold)"
산출:
ruby 2.4.0dev (2016-06-24 trunk 55499) [x86_64-linux]
Ruby 2.4 (default) : IÑTËRNÂTIÔNÀLIZÆTIØN / iñtërnâtiônàlizætiøn
Ruby 2.4 (ascii) : IñTëRNâTIôNàLIZæTIøN / iÑtËrnÂtiÔnÀlizÆtiØn
Ruby 2.4 (turkic) : IÑTËRNÂTİÔNÀLİZÆTİØN / ıñtërnâtıônàlızætıøn
Ruby 2.4 (lithuanian) : IÑTËRNÂTIÔNÀLIZÆTIØN / iñtërnâtiônàlizætiøn
Ruby 2.4 (fold) : - / iñtërnâtiônàlizætiøn
반응형
'IT박스' 카테고리의 다른 글
PHP에서 두 문자열을 알파벳순으로 비교하는 방법은 무엇입니까? (0) | 2021.01.07 |
---|---|
timeit 대 타이밍 데코레이터 (0) | 2021.01.07 |
SQL의 기존 테이블에 새로운 널이 아닌 열이있는 대체 테이블 (0) | 2021.01.07 |
2012 년에 권장되는 jQuery 템플릿? (0) | 2021.01.06 |
HttpClient로 본문 요청 작성 (0) | 2021.01.06 |