인코딩을위한 배치 변환 파일


답변:


36

Cygwin 또는 GnuWin32iconvdos2unix(및 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"를 보는 것은 드문 일이 아닙니다. .


4
입력 및 출력과 동일한 파일 이름을 사용하지 마십시오! iconv이 크기를 초과하면 파일을 32,768 바이트로 자릅니다. 그가 읽고 자하는 파일을 쓸 때, 파일이 충분히 작 으면 작업을 수행 할 수 있습니다. 그렇지 않으면 경고없이 파일을 자릅니다 ...
Niavlys

1
참고이 질문에는 osx 태그가 지정되어 있으며 요세미티 또는 El Cap에서 모두 변환 명령이 작동하지 않는 것 같습니다. Apple에서 제공하는 iconv 버전은 --verbose 또는 -o를 지원하지 않으며 stdout을 리디렉션하는 다른 구문은 어떤 이유로 작동하지 않으며 일반 stdout으로 보냅니다.
Scott McIntyre

28

파워 쉘 이 같은 작업을 수행 할 수 있습니다 :

%  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
}

첫 번째 제안을 통해 ANSI에서 UTF로 변환하면
텍스트 파일

@Acroneos : 그런 다음 실수를했다 : 인파 일은 IN.txt이고, 아웃 파일은 OUT.txt이다 ... 이런 식으로 원본을 덮어 쓸 수 없다. IN.txt 및 OUT.txt에 동일한 파일 이름을 사용한 경우 읽고있는 파일을 덮어 씁니다.
akira

Powershell은 BOM을 사용하여 UTF로 변환합니다. 찾기 및 iconv가 훨씬 쉬울 수 있습니다.
pparas

6

개행의 Wikipedia 페이지에는 변환 유틸리티 에 대한 섹션이 있습니다 .

이것은 Windows와 함께 제공되는 도구 만 사용하여 변환하는 것이 가장 좋습니다.

TYPE unix_file | FIND "" /V > dos_file

3

UTFCast 는 배치 모드를 지원하는 Windows 용 유니 코드 변환기입니다. 유료 버전을 사용하고 있으며 매우 편안합니다.

UTFCast는 마우스 클릭만으로 모든 텍스트 파일을 UTF 인코딩으로 일괄 변환 할 수있는 유니 코드 변환기입니다. 원본 파일의 디렉토리 구조를 유지하면서 텍스트 파일로 가득 찬 디렉토리를 UTF-8, UTF-16 및 UTF-32를 포함한 UTF 인코딩으로 출력 디렉토리로 변환하는 데 사용할 수 있습니다. 텍스트 파일의 확장자가 다른 경우에도 UTFCast는 텍스트 파일을 자동으로 감지하여 변환 할 수 있습니다.


그들은 같은 폴더로 변환 할 수 없으며 다른 대상 폴더로만 변환 할 수 있습니다.
Uwe Keim

프로 버전은 내부 변환이 가능합니다. $ 20 / 3 개월. rotatingscrew.com/utfcast-version-comparison.aspx
SherylHohman

아, 익스프레스 (무료) 버전은 쓸모가 없습니다-utf-8 WITH BOM 만 감지합니다! (모두가 할 수 있음 ). 팝 3 달러마다 3 달러마다 자동 갱신되는 Pro 버전 만 자동 감지됩니다. 비 기업 사용자에게는 가파른 가격입니다. 기본 버전을 사용하려고 시도하고 파일이 이미 utf-8 (BOM 제외) 인 경우이 변환기는 파일을 ASCII로 감지 한 다음 utf-8로 (다시) "변환"하여 횡설수설 할 수 있습니다. . Express 버전을 사용하기 전에이 점을주의하십시오! 그들은 출력을 생성하지 않는 프로 용 데모 버전을 가지고 있습니다. 무의미한 IMHO cuz는 구매하기 전에 결과를 확인할 수 없습니다!
SherylHohman

3

자동 감지 기능을 갖춘 find를 사용한 Oneliner

일치하는 모든 텍스트 파일 의 문자 인코딩자동으로 감지 되고 일치하는 모든 텍스트 파일이 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많음 .


1

iconv -f original_charset -t utf-8 originalfile > newfile

for 루프에서 위 명령을 실행하십시오.





0

내 사용 사례, 나는 자동 입력 인코딩 감지를 필요로하고와 많은 파일이 있었다 Windows-1250인코딩에 대한 명령 file -bi <FILE>반환 charset=unknown-8bit. 에 유효한 매개 변수가 아닙니다 iconv.

나는 enca 와 함께 최고의 결과를 얻었습니다 .

txt 확장자를 가진 모든 파일을 utf-8로 변환

find . -type f -iname *.txt -exec sh -c 'echo "$1" && enca "$1" -x utf-8' -- {} \;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.