결합된 유니코드 문자 바꾸기

결합된 유니코드 문자 바꾸기

미리 결합된 유니코드 문자가 포함된 파일이 있습니다.이에 대한 Wikipedia 페이지는 다음과 같습니다."Åström"과 같은 단어가 있는데 이 언어의 알파벳에는 악센트 표시가 없습니다. 제거하고 싶지만 방법을 모르겠습니다. 문자를 복사하여 붙여넣어 보았지만(이전에는 일부에서는 작동했지만 결합되지 않았을 수도 있음) 예상한 결과가 나오지 않습니다.

답변1

당신 Åström분해된유니코드 문자가 아닌미리 만들어진그것들:

(현재 로케일이 UTF-8을 사용하고 명령줄에 입력된 문자가 여기에서는 UTF-8로 인코딩되어 있다고 가정합니다. (UTF-8을 사용하는 브라우저에서 복사하여 붙여넣었습니다.)

$ printf %s Åström | uconv -x any-name
\N{LATIN CAPITAL LETTER A}\N{COMBINING RING ABOVE}\N{LATIN SMALL LETTER S}\N{LATIN SMALL LETTER T}\N{LATIN SMALL LETTER R}\N{LATIN SMALL LETTER O}\N{COMBINING DIAERESIS}\N{LATIN SMALL LETTER M}

참고하세요위의 발음 구별 부호와 결합됨. 사전 조립된 내용은 다음과 같습니다.

$ printf %s Åström | uconv -x nfkc | uconv -x any-name
\N{LATIN CAPITAL LETTER A WITH RING ABOVE}\N{LATIN SMALL LETTER S}\N{LATIN SMALL LETTER T}\N{LATIN SMALL LETTER R}\N{LATIN SMALL LETTER O WITH DIAERESIS}\N{LATIN SMALL LETTER M}

반대 결합 악센트를 사용하여 미리 구성된 문자는 iso8859-1 또는 iso8859-15에 있습니다. 따라서 이것이 의도한 대상 문자 세트인 경우 다음을 수행할 수 있습니다.

$ printf %s Åström | uconv -x nfkc -t iso-8859-1

변환 가능한 문자를 변환하려면 다른 문자와 유사하게 변환하세요.

$ printf %s 'Åström й' | uconv -x nfkc | iconv -t iso-8859-5//TRANSLIT
Astrom <0xd9>

(©는 iso-8859-5 문자 세트에 있으므로 해당 표현(0xd9 바이트)으로 변환되지만 Å 또는 ö는 그렇지 않으므로 a Ao근사값으로 변환됩니다.)

입력에 분해된 문자(예: 및 )와 사전 구성된 문자(예: )의 조합이 포함되어 й있고 사전 구성된 문자는 유지하지만 분해된 문자의 결합 문자를 삭제하려는 경우 다음을 수행할 수 있습니다.

$ printf %s 'Åström й' | uconv -x '[:Nonspacing Mark:]>'
Astrom й

유니코드에는 시각적 표현이 있는 두 문자가 있습니다 Å. 즉, U+212B(Ångström) 및 U+00C5(위에 고리가 있는 A)입니다. nfkcU+212B를 U+00C5로 변환합니다.

모든 분음 부호를 제거하려면 다음을 시도해 보십시오.

$ printf %s Åström | iconv -t us//TRANSLIT
Astrom

(일부 구현에서는 iconv인접한 또는... 문자로 악센트를 추정할 수 있습니다.)"'

또는:

$ printf %s Åström | uconv -x nfd -c -t us
Astrom

(분해, ASCII로 변환, 악센트 결합 등 변환할 수 없는 문자 제거)

또는:

$ printf %s Åström | uconv -x "::nfd;[:Nonspacing Mark:]>;"
Astrom

(분해, 공백이 아닌 모든 표시 제거)

또는:

$ printf %s Åström | uconv -x Latin-ASCII
Astrom

(라틴 알파벳 문자의 ASCII 음역).

uconv유틸리티입니다집중 치료실 프로젝트. 데비안과 그 파생 제품에서는 icu-devtools패키지에서 찾을 수 있습니다.

답변2

CPAN에서 사용할 수 있는 Perl 모듈 Text::Unaccent가 있습니다.

http://search.cpan.org/~ldachary/Text-Unaccent-1.08/Unaccent.pm

샘플 Perl 스크립트(STDIN에서 STDOUT까지)는 다음과 같습니다.

#!/usr/bin/perl
use Text::Unaccent;
while ($zeile = <STDIN>)
{
   print STDOUT unac_string("UTF-8", $zeile);
}

답변3

내가 사용한 해결책은 Emacs파일을 열고 악센트가 있는 섹션을 찾은 다음 악센트가 있는 문자와 악센트 앞에 있는 문자를 복사하는 것이었습니다. 파일의 시작 부분으로 가서 실행하고 M-x replace-string, 복사한 것을 붙여넣고, 미니버퍼의 시작 부분으로 가서 이전 문자를 삭제하고 명령을 실행합니다.

악센트는 프리캐릭터에 가깝다고 생각해서 제가 원하는 캐릭터와 그 이전 캐릭터를 카피해서 꼭 원하는거 다 카피했어요.

관련 정보