명령 또는 도구를 사용하여 디렉토리의 파일을 인코딩 (예 : ANSI-> UTF-8)으로 일괄 변환하려면 어떻게해야합니까?
단일 파일의 경우 편집기가 도움이되지만 대량 파일 작업을 수행하는 방법은 무엇입니까?
명령 또는 도구를 사용하여 디렉토리의 파일을 인코딩 (예 : ANSI-> UTF-8)으로 일괄 변환하려면 어떻게해야합니까?
단일 파일의 경우 편집기가 도움이되지만 대량 파일 작업을 수행하는 방법은 무엇입니까?
답변:
Cygwin 또는 GnuWin32 는 iconv
및 dos2unix
(및 unix2dos
) 과 같은 유닉스 도구를 제공합니다 . Unix / Linux / Cygwin에서 ANSI 대신 "windows-1252"를 인코딩으로 사용하려고합니다 (아래 참조). (시스템이 1252 이외의 코드 페이지를 기본 코드 페이지로 사용하고 있다는 것을 알지 못하는 경우 iconv 에 번역 할 올바른 코드 페이지를 알려야 합니다.)
다음을 사용하여 하나 ( -f
) 에서 다른 ( )로 변환하십시오 -t
.
$ iconv -f windows-1252 -t utf-8 infile > outfile
또는 찾기 및 정복 형태 :
## this will clobber the original files!
$ find . -name '*.txt' -exec iconv --verbose -f windows-1252 -t utf-8 {} \> {} \;
또는
## this will clobber the original files!
$ find . -name '*.txt' -exec iconv --verbose -f windows-1252 -t utf-8 -o {} {} \;
이 질문은이 사이트에서 여러 번 요청되었으므로 "ANSI"에 대한 추가 정보가 있습니다. CesarB는 관련 질문에 대한 답변에서 다음과 같이 언급합니다 .
Windows에는 "ANSI"라고하는 몇 가지 인코딩이 있습니다. 실제로 ANSI는 잘못된 이름 입니다. iconv에는 원하는 것을 추측 할 수있는 방법이 없습니다.
ANSI 인코딩은 Windows API의 "A"기능에서 사용되는 인코딩입니다 ( "W"기능은 UTF-16을 사용함). 해당 인코딩은 일반적으로 Windows 시스템 언어에 따라 다릅니다. 가장 일반적인 것은 CP 1252 (Windows-1252라고도 함)입니다. 따라서 편집기에서 ANSI라고 할 때 이는 시스템에서 사용되는 기본 비 유니 코드 인코딩 (일반적으로 텍스트 파일에 사용되는 인코딩) 인 "API 함수가 기본 ANSI 인코딩으로 사용하는 것"을 의미합니다.
그가 링크 한 페이지 는 CP 1252와 ISO-8859-1의 기원에 대한 이 역사적인 tidbit ( Microsoft PDF 에서 인용 )를 제공합니다.
[...] 이것은 Windows 코드 페이지 1252가 원래 ISO 표준 8859-1이 된 ANSI 초안을 기반으로한다는 사실에서 비롯된 것입니다. 그러나 ISO 표준에서 제어 코드 용으로 예약 된 범위에 코드 포인트를 추가 할 때 Windows 코드 페이지 1252와 원래 ISO 8859-x 시리즈를 기반으로하는 후속 Windows 코드 페이지는 ISO에서 벗어났습니다. 현재까지 Microsoft 내부와 외부에서 개발 커뮤니티가 8859-1 코드 페이지를 Windows 1252와 혼동하고 Windows 코드 페이지 지원을 나타내는 데 사용되는 "ANSI"또는 "A"를 보는 것은 드문 일이 아닙니다. .
iconv
이 크기를 초과하면 파일을 32,768 바이트로 자릅니다. 그가 읽고 자하는 파일을 쓸 때, 파일이 충분히 작 으면 작업을 수행 할 수 있습니다. 그렇지 않으면 경고없이 파일을 자릅니다 ...
와 파워 쉘 이 같은 작업을 수행 할 수 있습니다 :
% get-content IN.txt | out-file -encoding ENC -filepath OUT.txt
ENC는 유니 코드, 아스키, utf8, utf32와 같은 것입니다. 체크 아웃 '도움말 파일'.
디렉토리의 모든 * .txt 파일을 utf8로 변환하려면 다음과 같이하십시오.
% foreach($i in ls -name DIR/*.txt) { \
get-content DIR/$i | \
out-file -encoding utf8 -filepath DIR2/$i \
}
DIR2에 각 .txt 파일의 변환 된 버전을 만듭니다.
편집 : 모든 하위 디렉토리의 파일을 바꾸려면 다음을 사용하십시오.
% foreach($i in ls -recurse -filter "*.java") {
$temp = get-content $i.fullname
out-file -filepath $i.fullname -inputobject $temp -encoding utf8 -force
}
UTFCast 는 배치 모드를 지원하는 Windows 용 유니 코드 변환기입니다. 유료 버전을 사용하고 있으며 매우 편안합니다.
UTFCast는 마우스 클릭만으로 모든 텍스트 파일을 UTF 인코딩으로 일괄 변환 할 수있는 유니 코드 변환기입니다. 원본 파일의 디렉토리 구조를 유지하면서 텍스트 파일로 가득 찬 디렉토리를 UTF-8, UTF-16 및 UTF-32를 포함한 UTF 인코딩으로 출력 디렉토리로 변환하는 데 사용할 수 있습니다. 텍스트 파일의 확장자가 다른 경우에도 UTFCast는 텍스트 파일을 자동으로 감지하여 변환 할 수 있습니다.
일치하는 모든 텍스트 파일 의 문자 인코딩 이 자동으로 감지 되고 일치하는 모든 텍스트 파일이 utf-8
인코딩 으로 변환됩니다 .
$ find . -type f -iname *.txt -exec sh -c 'iconv -f $(file -bi "$1" |sed -e "s/.*[ ]charset=//") -t utf-8 -o converted "$1" && mv converted "$1"' -- {} \;
이러한 단계를 수행하기 위해 하위 쉘 sh
이와 함께 사용되며 플래그 -exec
와 함께 하나의 라이너를 실행 -c
하고 파일 이름을와 "$1"
함께 위치 인수로 전달합니다 -- {}
. 그 사이에 utf-8
출력 파일의 이름은 임시로 지정 converted
됩니다.
이 find
명령은 이러한 파일 관리 자동화에 매우 유용합니다.
여기를 클릭 더 find
많음 .
이 Python 스크립트를 사용하십시오. https://github.com/goerz/convert_encoding.py 모든 플랫폼에서 작동합니다. Python 2.7이 필요합니다.
이 dos2unix
유닉스에.
Windows를위한 또 다른 유사한 도구가 있습니다 ( 여기서 ref 참조 ).
Unix와 Windows 텍스트 파일을 어떻게 변환합니까? 더 많은 트릭이 있습니다
dos2unix
줄 바꿈을 변환하는 데 유용 하지만 OP는 문자 인코딩 변환을 찾고 있습니다.
EncodingMaster 를 사용할 수 있습니다 . 무료이며 Windows, Linux 및 Mac OS X 버전이 있으며 실제로 잘 작동합니다.