UTF-8 파일을 ASCII로 변환 (최선의 노력)


23

여러 언어로 된 텍스트를 포함하는 UTF-8 파일이 있습니다. 그것은 많은 사람들의 이름입니다. ASCII로 변환해야하고 가능한 한 괜찮은 결과가 필요합니다.

더 넓은 인코딩에서 더 좁은 인코딩으로 변환하는 방법에는 여러 가지가 있습니다. 가장 간단한 변형은 모든 비 ASCII 문자를 '_'와 같은 자리 표시 자로 바꾸는 것입니다. 파일이 작성된 언어를 알고 있다면 로마자 표기법과 같은 추가 가능성이 있습니다.

유닉스에서 사용 가능한 유닉스 도구 또는 프로그래밍 언어 라이브러리는 UTF-8에서 ASCII로 적절한 변환을 제공 할 수 있습니까?

대부분의 텍스트는 유럽, 라틴 유형 기반 언어로되어 있습니다.


1
어느 언어가 어디서 시작되는지 아십니까? 예를 들어, 옹 라우트의 비 가용성을 처리하는 방법에는 차이가 있습니다 (ö에서와 같이). 독일어에서는 항상 "oe"를 쓸 수 있지만 네덜란드어에서는 움라우트를 사용할 수없는 경우 대시와 움라우트 문자를 사용하여 "설명"할 수 있습니다 ( "oe"는 완전히 다른 diphthong입니다)
Anthon

“가능한 한 괜찮은 수준”을 어떻게 정의하십니까? 실제 어려움은 매핑을 정의하는 것입니다. 이에 비해 프로그래밍 작업은 쉽지 않습니다. 실제로 사용되는 매핑은 매우 다양하며 두 가지 방식으로 언어에 따라 다를 수 있습니다. 텍스트의 언어와 독자의 가정 된 언어 (특히 로마자)와 관련이 있습니다.
Jukka K. Korpela

@ JukkaK.Korpela "가능한 한 괜찮은 수준"은 물론 내가 요구하는 "Unix 도구 또는 프로그래밍 언어 라이브러리"를 만든 사람들에 의해 정의됩니다. 내가 얻을 수있는 최선의 방법이 ASCII가 아닌 모든 것을 밑줄로 바꾸는 것이라면 할 수있는 일이별로 없습니다. 내 자신의 도구를 작성하는 것을 제외하고는 그렇지 않습니다. 나는 유닉스를 추측 @ SO이 질문에 대한 최고의 장소되지 않을 수도 있습니다 ...
user7610

1
@보다 user7610 기타 iconvtr,이 Unidecode . 나는 그것에 익숙하지 않지만 파이썬을 사용할 수 있다면 원하는 것을 할 수 있습니다.
yellowantphil

1
JavaScript / 노드의 @yellowantphil 또는 노드 유니 코드 , C♯의 UnidecodeSharp 또는 Perl의 Text :: Unidecode ( 이 이름의 첫 번째 이름). 다른 버전이 있다고 생각합니다.
user7610

답변:


11
konwert utf8-ascii

변환 테이블에 따라 최선의 변환이 수행됩니다. 입력 언어를 대략 알고 있다면 더 나은 결과를 제공하는 언어 별 필터가 있습니다.

konwert utf8-xmetodo

에스페란토를 x-metodo 표현으로 변환 한 것입니다.

konwert UTF8-tex

분음 부호를 TeX로 표현하려고 시도 할 때 언어 별 매개 변수가 있습니다.

konwert UTF8-ascii/de

평범한 "a"대신 "ä"를 "ae"(독일어 관습)로 음역합니다.

konwert UTF8-ascii/rosyjski

영어와 유사한 규칙 대신 러시아어 음역에 폴란드어 규칙을 사용합니다.


konwert웹 사이트 의 최신 위치 입니까? 어디서나 포장되어 있습니까? github.com/taw/konwert/tree/master/konwert-1.8
Nemo

25

이것은 몇 가지 일에 효과적입니다.

iconv -f utf-8 -t ascii//TRANSLIT

echo ĥéĺłœ π | iconv -f utf-8 -t ascii//TRANSLIT을 반환합니다 helloe ?. iconv변환 방법을 모르는 문자는 물음표로 바뀝니다.

iconvPOSIX이지만 모든 시스템에 TRANSLIT옵션 이 있는지 모르겠습니다 . Linux에서 작동합니다. 또한이 IGNORE옵션은 대상 문자 세트에 표시 할 수없는 문자를 자동으로 버립니다 (참조 man iconv_open).

열등하지만 POSIX 호환 옵션은을 사용하는 것 tr입니다. 이 명령은 모든 비 ASCII 코드 포인트를 물음표로 바꿉니다. 한 번에 한 바이트 씩 UTF-8 텍스트를 읽습니다. “É” 는 결합 악센트 또는 사전 작성된 문자를 사용하여 인코딩되었는지에 따라 E?또는 로 대체 될 수 있습니다 ?.

echo café äëïöü | tr -d '\200-\277' | tr '\300-\377' '[?*]'

이 예제는 caf? ?????미리 작성된 문자를 사용하여을 반환 합니다.


tr한 번에 한 바이트 씩 작동하도록되어 있지 않습니다. GNU tr은 그렇지만 버그입니다.
Stéphane Chazelas

3
iconv -f utf-8 -t ascii//TRANSLIT나를 위해 잘 일했다. 둥근 따옴표를 직선 따옴표로 변경했습니다. 감사.
대령 패닉

iconv는 Pinyin과 같이 악센트가 큰 문자를 질식시킵니다.
sventechie

참고 //TRANSLIT또한 예를 들어, 문자의 다른 세트 작동 iso-8859-1//TRANSLIT.
Skippy le Grand Gourou

iconv주는 iconv: illegal input sequence at position 1234나를 위해 파일을 자릅니다. 캐릭터를 삭제하고 시퀀스를 다시 가져 오려고하면 좋을 것입니다.
jozxyqk


2

UTF-8 형식의 파일에 여러 언어로 된 [사람의 이름]이 포함되어 있습니다 [ASCII에서 의미있는 것으로 변환하고 싶습니다].

다음 이름을 관계자가 반대하지 않는 ASCII 문자열로 변환 할 수 있기를 원하십니까?

  • ஸ்றீனிவாஸ ராமானுஜன் ஐயங்கார்
  • عبد الله الثاني بن الحسين

이 작업을 수행 할 수있는 자동화 된 도구가없는 것 같습니다. 개인 이름의 라틴어가 없거나 매우 많을 수 있습니다. 소프트웨어는 문화적으로 허용되는 버전을 선택할 수 없습니다. 적어도 관련된 사람의 문화에 대해 많은 것을 알고있는 소프트웨어가 없으면 아닙니다.

참조 /programming//a/1398403/477035


2
perl -e 'use utf8; use Text::Unidecode; print unidecode("عبد الله الثاني بسين")'``bd llh lthny bn lHsyn ''을 생성하여 내 목적에 충분한 음역을 제공합니다.
user7610

4
@ user7610 : 훌륭하지만 요르단의 압둘라 2 세 왕 은 동의하지 않을 수 있습니다. 경우 누군가가 중요한 :-) 대표 이사에 불평에 내가 설명을 준비 할 것
RedGrittyBrick

2

이를 위해 Text :: Unidecode 와 함께 Perl을 사용 했습니다. 예:

perl -e 'use utf8; use Text::Unidecode; print unidecode("عبد الله الثاني بسين")

bd llh lthny bn lHsyn내 목적에 맞는 결과입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.