이 질문 에서 영감을 받아 iconv
명령을 사용하여 BOM 및 지정된 엔디안으로 UTF-16 출력을 생성 할 수 있습니까?
이 iconv
명령은 텍스트를 한 인코딩에서 다른 인코딩으로 변환합니다.
예를 들면 다음과 같습니다.
echo hello | iconv -f ascii -t utf-16
의 UTF-16 표현을 생성합니다 "hello\n"
.
UTF-16 파일은 항상 그런 것은 아니지만 종종 유니 코드 문자의 2 바이트 인코딩 인 BOM (Byte Order Mark)으로 시작합니다 U+FEFF
. 처음 두 바이트가 FE FF
또는 인지 확인하여 BOM을 사용하여 UTF-16 파일의 엔디안을 확인할 수 있습니다 FF FE
.
이 iconv
명령에는 UTF-16 출력을 생성하기위한 몇 가지 옵션이 있습니다.
$ iconv --list | grep -i utf-16
UTF-16//
UTF-16BE//
UTF-16LE//
이 명령은
echo hello | iconv -f ascii -t utf-16be
BOM없이 빅 엔디안 UTF-16 을 생성합니다 . 엔디안을 지정한 경우 출력에 표시하지 않아도된다고 가정하는 것 같습니다. 마찬가지로 utf-16le
BOM없이 리틀 엔디안 UTF-16을 생성합니다.
이:
echo hello | iconv -f ascii -t utf-16
BOM을 사용 하여 (x86 Ubuntu 시스템에서) 리틀 엔디 언 UTF-16 을 생성하지만 리틀 엔디안 시스템에서도 BOM을 사용하여 빅 엔디안 UTF-16을 생성하는 비슷한 명령에 대한 보고서를 보았습니다.
BOM을 항상 수동으로 사용 utf-16be
하거나 utf-16le
추가 할 수 있지만 iconv
명령 만 사용하는 솔루션을 찾고 있습니다.
엔디안이 생성 하는 내용을 알고있는 경우 다른 해결 방법 -t utf-16
은 다음과 같습니다.
echo hello | iconv -f ascii -t utf-16 | dd conv=swab 2>/dev/null
내가 것 처럼 사용하는 것은 같은 것입니다 :
iconv -f ascii -t utf-16bebom # big-endian with BOM
iconv -f ascii -t utf-16lebom # little-endian with BOM
그러나 iconv
그것을 지원하지 않습니다.
편집하다 :
x86 Mac OSX 시스템에 액세스 할 수있는 사람이 다음 명령의 (복사하여 붙여 넣기) 출력을 보여주는 주석을 게시 할 수 있습니까?
echo hello | iconv -f ascii -t utf-16 | od -x
iconv
왜 -t utf-16
엔디안이 정교 하지 않은지 궁금 합니다.
iconv -f UTF-8 -t UTF-16
리틀 엔디안 시스템 (MacOS)에서 실행되어 BOM으로 빅 엔디안 UTF-16을 생성하는 것을 보여줍니다 . 매우 이상하게 보입니다.