유니코드 문자를 번역하는 방법은 무엇입니까? [복사]

유니코드 문자를 번역하는 방법은 무엇입니까? [복사]

아래와 같이 일부 문자를 전자 형식으로 변환하려고 합니다.

tr 'abcdefghijklmnopqrstuvwxyz' 'abcdefghijklmnopqrstuvwxyz'

그러나 이것은 작동하지 않습니다. 검색해서 찾아보니trUTF-8은 지원되지 않습니다.. 그래서 그 질문에 대한 대답을 바탕으로 Perl을 사용해 보았습니다.

perl -C -pe 'tr/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/'

하지만 여전히 도움이 되지 않습니다. 나는 더 간단한 버전을 시도했다

$ echo abca | perl -C -pe 's/a/a/g'
ï½bcï½
$ echo abca | perl -C -pe 'tr/a/a/'
ïbcï

Perl은 여전히 ​​멀티바이트 UTF-8 문자를 바이트로 처리하는 것 같습니다.

이 문자를 올바르게 변환하려면 어떻게 해야 합니까?

답변1

GNU와 BSD는 둘 다 sed적절한 로케일에서 멀티바이트를 인식합니다.y명령은 다음과 유사합니다.tr:

$ echo hello | sed -e 'y/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/'
hello

로케일이 UTF-8이면 실행 가능한 대부분의 위치에서 작동합니다.


Perl 문제는 멀티바이트 문자를 바이트로 처리하는 것만큼 간단하지 않습니다. 입력을 매우 잘 이해하고 출력을 인코딩하기도 합니다.소스 코드이해하지 못합니다:

$ echo abc | perl -C -pe 'tr/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/'|hexdump -C
00000000  c3 af c2 bd c2 81 0a                              |.......|

"a"의 UTF-8 인코딩은 ef bd 81"b"를 두 번째 바이트로 처리한 다음 출력 시 인코딩을 시도하고 "c"에도 동일하게 적용되는 것을 볼 수 있습니다. 너use utf8Perl(5) 소스 코드 자체를 이 방식으로 인코딩해야 합니다 .; -C프로그램이 실행 중일 때만 IO를 제어합니다.

use utf8;문자열 을 입력 -e하거나-Mutf8명령줄에서 사용:

$ echo abc | perl -C -Mutf8 -pe 'tr/abcdefghijklmnopqrstuvwxyz/abcdefghijklmnopqrstuvwxyz/'
abc

Perl 6은 많은 문제처럼 이 문제를 해결하지만...

관련 정보