유니코드 코드 포인트 목록이 있지만 이러한 16진수 값을 해당 문자가 나타내는 실제 문자로 변환하는 "쉬운" 방법을 모르겠습니다...
나는 들었다다루기 힘든예 echo -e '\u0965'
, 하지만 저는세게 때리다4.1.
bash에 대한 zsh 방법만큼 간단한 것이 있습니까?
답변1
iconv와 함께 GNU coreutils에서 bash의 echo 또는 /bin/echo를 사용할 수 있습니다.
echo -ne '\x09\x65' | iconv -f utf-16be
기본적으로 iconv는 로케일 인코딩으로 변환됩니다. 아마도 Perl은 특정 쉘이나 echo 명령에 의존하는 것보다 이식성이 더 좋을 것입니다. 내가 아는 대부분의 UNIX 시스템은 Perl을 제공하며 Windows 포트도 여러 개 있습니다.
perl -C -e 'print chr 0x0965'
대부분의 경우 이 작업을 수행해야 할 때는 지원 기능이 내장된 Vim/GVim과 같은 편집기를 사용합니다. 삽입 모드에서 Ctrl-V를 누른 다음 u를 누른 다음 4개의 16진수 문자를 입력합니다. U+FFFF 이외의 문자를 원할 경우 대문자 U를 사용하고 8개의 16진수 문자를 입력하세요. Vim은 만들기 쉬운 사용자 정의 키맵도 지원합니다. 일련의 문자를 다른 기호로 변환합니다. 예를 들어, 저는 TM을 ™로, (C)를 ©로, (R)을 ®로 변환하는 www라는 키맵을 개발했습니다. 필요할 경우를 대비해 Klingon의 키맵도 가지고 있습니다. Emacs에도 비슷한 것이 있다고 확신합니다. GVim 및 GNOME 터미널이 포함된 GTK+ 애플리케이션을 사용하는 경우 Control-Shift-u 뒤에 4개의 16진수 문자를 입력하여 유니코드 문자를 만들 수 있습니다. KDE/Qt에도 비슷한 것이 있을 것이라고 확신합니다.
고쳐 쓰다:Bash 4.2부터는 이제 내장 기능인 것 같습니다.
echo $'\u0965'
고쳐 쓰다:또한 요즘에는 Perl보다 Python 예제가 더 선호될 수 있습니다. 이는 Python 2와 3 모두에서 작동합니다.
python -c 'print(u"\u0965")'
답변2
배쉬 4.2(2011년 출시) echo -e '\u0965'
, printf '\u0965'
및 에 대한 printf %b '\u0965'
지원이 추가되었습니다 echo $'\u0965'
.
http://tiswww.case.edu/php/chet/bash/FAQ:
o $'...', echo, and printf understand \uXXXX and \UXXXXXXXX escape sequences.
답변3
GNU coreutils가 있는 경우 다음을 시도해 보십시오 printf
.
$ printf '\u0965\n'
॥
echo
콘솔이 UTF-8을 사용하고 UTF-8 인코딩이 있는 경우 다음을 수행할 수 있습니다.
$ echo -e '\xE0\xA5\xA5'
유니코드에서 UTF-8 16진수로 인코딩된 표는 여기에서 찾을 수 있습니다.http://www.utf8-chartable.de/. 다양한 스크립트 언어를 사용하여 유니코드 코드 포인트를 16진수로 변환할 수 있습니다. 다음은 Python을 사용한 예입니다.
python -c "print(unichr(int('0965', 16)).encode('utf-8').encode('hex'))"
다음은 인수를 올바른 16진수 값으로 변환하는 Perl 스크립트입니다(여기에는 불필요한 괄호가 많이 있습니다).
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
use Encode;
foreach (@ARGV) {
say unpack('H*', encode('utf8', chr(hex($_))))
}
예를 들어,
./uni2utf 0965
e0a5a5
물론 Perl이나 Python이 있다면 이를 사용하여 문자를 인쇄할 수도 있습니다.
답변4
Bash 버전 4.2(및 이후 버전)에서 패턴 대체를 사용합니다.
${parameter/pattern/string}
여기에 명시된 바와 같이http://steve-parker.org/sh/tips/pattern-substitution/
UNICODE_HEX="U+02211"
printf ${UNICODE_HEX/U+/"\U"}
∑
UNICODE_HEX="U+03BB"
printf ${UNICODE_HEX/U+/"\U"}
λ