, 나는 이런 식으로 뭔가를 할 거라고 :
ActiveSupport::Multibyte::Unicode.normalize('Těžiště', :kd).chars.grep(/\p{^Mn}/).join('')
는 'Teziste'
를 얻을 수 있습니다. :kd
본질적으로 decomposes 악센트 부호가있는 문자를 별도의 악센트 및 문자로 매핑 한 다음 \p{^Mn}
은 문자 스트림에서 모든 비 공백을 제거하고 모두 join
과 함께 다시 넣으면 악센트없는 문자열이 반환됩니다.
당신은 레일이 없거나 ActiveSupport 편리합니다, 당신은 unicode-utils 대신 ActiveSupport::Multibyte::Unicode.normalize
에서 UnicodeUtils.compatibility_decomposition
를 사용할 수있는 경우 :
: 나는 레일 - 땅에서
String
에 패치 (patch) ActiveSupport 버전을 사용하는 경향이
> UnicodeUtils.compatibility_decomposition('Těžiště').chars.grep(/\p{^Mn}/).join('')
=> "Teziste"
def de_accent
#
# `\p{Mn}` is also known as `\p{Nonspacing_Mark}` but only the short
# and cryptic form is documented.
#
ActiveSupport::Multibyte::Unicode.normalize(self, :kd).chars.grep(/\p{^Mn}/).join('')
end
내가 좋아하는 것을 말할 수 있도록 :
> s = 'Těžiště'.de_accent
=> "Teziste"
을3210
악센트를 제거하십시오.
이 접근 방식은 모든 것을 처리하지는 않지만 충분할 수 있습니다.
예상되는 출력과 입력은 무엇입니까? –
''ascii // translit''이 아니 었습니까? – sawa
@ArupRakshit :''Těžiště ''가 분명히 입력이고''Teziste''가 예상 결과라고 생각하십시오. –