문자 집합간에 텍스트 파일을 변환하는 가장 좋은 방법은 무엇입니까?


526

문자 집합간에 텍스트 파일을 변환하는 가장 빠르고 쉬운 도구 또는 방법은 무엇입니까?

특히 UTF-8에서 ISO-8859-15로 또는 그 반대로 변환해야합니다.

좋아하는 스크립트 언어의 한 줄짜리 도구, 명령 줄 도구 또는 OS, 웹 사이트 등의 기타 유틸리티

지금까지 최고의 솔루션 :

Linux / UNIX / OS X / cygwin에서 :

  • Troels Arvin 이 제안한 Gnu iconv 는 필터로 사용 하는 것이 가장 좋습니다 . 보편적으로 사용 가능한 것 같습니다. 예:

    $ iconv -f UTF-8 -t ISO-8859-15 in.txt > out.txt
    

    Ben이 지적했듯이 iconv를 사용 하는 온라인 변환기있습니다 .

  • Cheekysoft 가 제안한 Gnu recode ( 수동 )는 하나 또는 여러 개의 파일을 그 자리에서 변환 합니다 . 예:

    $ recode UTF8..ISO-8859-15 in.txt
    

    이것은 짧은 별칭을 사용합니다.

    $ recode utf8..l9 in.txt
    

    Recode는 또한 다른 줄 끝 유형과 인코딩 간을 변환하는 데 사용할 수있는 표면 을 지원합니다 .

    줄 바꾸기를 LF (Unix)에서 CR-LF (DOS)로 변환합니다.

    $ recode ../CR-LF in.txt
    

    Base64 인코딩 파일 :

    $ recode ../Base64 in.txt
    

    그것들을 결합 할 수도 있습니다.

    Unix 줄 끝이있는 Base64 인코딩 UTF8 파일을 Dos 줄 끝이있는 Base64 인코딩 Latin 1 파일로 변환하십시오.

    $ recode utf8/Base64..l1/CR-LF/Base64 file.txt
    

Powershell이 설치된 Windows ( Jay Bazuzi ) :

  • PS C:\> gc -en utf8 in.txt | Out-File -en ascii out.txt

    (ISO-8859-15는 지원하지 않습니다. 지원되는 문자 세트는 유니 코드, utf7, utf8, utf32, ascii, bigendianunicode, default 및 oem입니다.)

편집하다

ISO-8859-1 지원을 의미합니까? "문자열"을 사용하면 예를 들어 반대로

gc -en string in.txt | Out-File -en utf8 out.txt

참고 : 가능한 열거 값은 "알 수 없음, 문자열, 유니 코드, 바이트, BigEndianUnicode, UTF8, UTF7, Ascii"입니다.


시도 gc -en Ascii readme.html | Out-File -en UTF8 readme.html했지만 파일을 utf-8로 변환하지만 비어 있습니다! 메모장 ++은 파일이 Ansi 형식이지만 유효한 문자 세트가 아니라는 것을 이해하면서 읽는다고 말합니다. uk.answers.yahoo.com/question/index?qid=20100927014115AAiRExF
오지

2
관련 질문에 대한 답변을 찾기 위해이 문제를 해결하십시오. recode파일 이름을 전달하지 않으면 필터 역할 을 할 것입니다. 예 :recode utf8..l9 < in.txt > out.txt
Jez

iconv.com/iconv.htm 이 나에게 죽은 것처럼 보입니까? (timeout)
Andrew Newby

2
을 사용 enca하는 경우 입력 인코딩을 지정할 필요가 없습니다. 언어를 지정하는 것만으로도 충분 enca -L ru -x utf8 FILE.TXT합니다.
Alexander Pozdneev

1
실제로, iconv는 필터 대신 내부 변환기로 훨씬 더 잘 작동했습니다. 를 사용하여 2 백만 개 이상의 줄로 파일을 변환하면 iconv -f UTF-32 -t UTF-8 input.csv > output.csv약 7 억 줄만 저장되고 1/3 만 저장됩니다. 전체 버전을 사용하면 iconv -f UTF-32 -t UTF-8 file.csv2 백만 개 이상의 모든 행이 성공적으로 변환되었습니다.
Nicolay77

답변:


246

독립형 유틸리티 접근

iconv -f ISO-8859-1 -t UTF-8 in.txt > out.txt
-f ENCODING  the encoding of the input
-t ENCODING  the encoding of the output

이 인수 중 하나를 지정할 필요는 없습니다. 기본적으로 현재 로케일 (일반적으로 UTF-8)로 설정됩니다.


4
비대시 버전으로 사용할 수없는 다른 사용자의 경우 iconv의 OSX (및 BSD) 버전은 다양한 UTF- * 인코딩의 비대칭 별칭을 지원하지 않는 것 같습니다. iconv -l | grep UTFiconv 사본이 지원하는 모든 UTF 관련 인코딩을 알려줍니다.
coredumperror 19.10에

14
입력 파일의 인코딩을 모르십니까? chardet in.txt최상의 추측을 생성하는 데 사용 합니다. 에서 ENCODING으로 결과를 사용할 수 있습니다 iconv -f ENCODING.
스튜

4
잘못된 문자 ( illegal input sequence at position메시지 제외) 에서 종료를 방지 하고 "이상한"문자를 "유사한"문자로 바꾸십시오 iconv -c -f UTF-8 -t ISO-8859-1//TRANSLIT in.txt > out.txt.
knb

나는 이것이 대부분의 NIX 플랫폼에서 표준이기 때문에 이것을 좋아합니다. 뿐만 아니라 VIM 명령 옵션 (별칭 : 참조 ex) 아래 . 추가 정보 : (1) 아마도 -f(from) 옵션을 로 지정할 필요는 없습니다 iconv. (2) file --mime-encoding <file/s>명령은 인코딩을 처음부터 파악하는 데 도움이 될 수 있습니다.
fr13d

1
다음 file명령으로 내 소스를 UTF-16 Little Endian으로보고했습니다. 실행 iconv -f UTF-16 -t UTF-8...하면 ASCII로 잘못 변환되어 iconv -f UTF-16LE...UTF-8을 출력 하도록 명시 적으로 지정해야 했습니다.
Plato

90

VIM 사용해보기

당신이 vim이것을 사용할 수있는 경우 :

모든 인코딩에 대해 테스트되지 않았습니다.

이것에 대한 멋진 부분은 소스 인코딩을 알 필요가 없다는 것입니다

vim +"set nobomb | set fenc=utf8 | x" filename.txt

이 명령은 파일을 직접 수정합니다.


설명 부분!

  1. +: vim에서 파일을 열 때 명령을 직접 입력하는 데 사용됩니다. Usualy는 특정 줄에서 파일을 열었습니다.vim +14 file.txt
  2. |: ;bash에서 와 같이 여러 명령의 구분 기호
  3. set nobomb : UTF-8 BOM 없음
  4. set fenc=utf8: 새 인코딩을 utf-8 doc 링크로 설정
  5. x : 파일 저장 후 닫기
  6. filename.txt : 파일 경로
  7. ": 파이프 때문에 qotes가 여기 있습니다. (그렇지 않으면 bash는 bash 파이프로 사용합니다)

꽤 시원하지만 다소 느립니다. 한 번에 여러 파일을 변환하기 위해 이것을 변경하는 방법이 있습니까 (따라서 vim의 초기화 비용을 절약하십시오)?
DomQ

설명 감사합니다! 폭탄 / 폭탄 설정에 대해 읽을 때까지 파일 시작과 함께 어려운 시간을 보냈습니다.
jjwdesign

1
순이익은 additionaly 당신은 당신이 사용하는 경우 BOM을 볼 수 있습니다 vim -b또는head file.txt|cat -e

1
예를 들면 :find -regextype posix-extended -type f -regex ".*\.(h|cpp|rc|fx|cs|props|xaml)" -exec vim +'set nobomb | set fenc=utf8 | x' {} \;
Gabriel

나는 이것을 CSV 파일의 인코딩을 변환하는 데 사용했으며 실제로 문자 집합이 변경되었음을 보았을 때 정말 흥분했습니다. 불행히도 파일을 MySQL에로드 할 때 vim 명령을 실행하기 전에 이전과 다른 수의 열이있었습니다. 파일을 열고 인코딩을 변환 한 다음 다른 모든 파일 내용을 동일하게 유지하면서 파일을 저장 / 닫는 것이 가능한지 궁금하십니까?
NightOwlPrgmr

39

Linux에서는 매우 강력한 recode 명령을 사용하여 다른 문자 집합과 줄 끝 문제를 시도하고 변환 할 수 있습니다. recode -l 은 도구가 변환 할 수있는 모든 형식과 인코딩을 보여줍니다. 매우 긴 목록 일 가능성이 높습니다.


로 어떻게 변환 LF합니까? 없다 /CR하고 /CR-LF있지만/LF
아론 프랑케


20
Get-Content -Encoding UTF8 FILE-UTF8.TXT | Out-File -Encoding UTF7 FILE-UTF7.TXT

입력 BOM이 올바른 것으로 가정 할 수있는 가장 짧은 버전 :

gc FILE.TXT | Out-File -en utf7 file-utf7.txt

1
더 잘 작동하는 짧은 버전이 있습니다. gc .\file-utf8.txt | sc -en utf7 .\file-utf7.txt
래리 배틀

@LarryBattle : 어떻게 Set-Content작동 Out-File합니까?
Jay Bazuzi

...오. 나는 그들이 거의 같은 것 같아요. 두 버전이 file-utf8.txt모두 동일한 출력 파일을 가지고 있기 때문에 두 버전 모두 입력에 동일한 파일을 사용한다고 가정했기 때문에 예제를 실행하는 데 문제 가있었습니다 file-utf7.txt.
래리 배틀

UTF16을 지원하지 않는다는 점을 제외하면 정말 좋습니다. UTF32는 지원하지만 UTF16은 지원하지 않습니다! 많은 Microsoft 소프트웨어 (fe SQL 서버 bcp)가 UTF16을 요구한다는 점을 제외하고 파일을 변환 할 필요가 없습니다. 그런 다음 유틸리티가 변환하지 않습니다. 가장 적게 말하는 것이 흥미 롭습니다.
노아

시도 gc -en Ascii readme.html | Out-File -en UTF8 readme.html했지만 파일을 utf-8로 변환하지만 비어 있습니다! 메모장 ++은 파일이 Ansi 형식이지만 유효한 문자 세트가 아니라는 것을 이해하면서 읽는다고 말합니다. uk.answers.yahoo.com/question/index?qid=20100927014115AAiRExF
오지

16

iconv Bash 기능 사용해보기

나는 이것을 넣었다 .bashrc.

utf8()
{
    iconv -f ISO-8859-1 -t UTF-8 $1 > $1.tmp
    rm $1
    mv $1.tmp $1
}

.. 파일을 다음과 같이 변환 할 수 있습니다.

utf8 MyClass.java

8
tmp = $ (mktmp)를 사용하여 임시 파일을 작성하는 것이 더 좋습니다. 또한 rm이있는 줄은 중복됩니다.
LMZ

1
자동 감지 입력 형식으로이 기능을 완료 할 수 있습니까?
mlibre

3
이 함수는 iconv 호출이 성공했는지 확인하지 않고 입력 파일을 삭제합니다.
philwalk

텍스트 파일의 내용이 변경됩니다. BOM이없는 UTF-8을 얻을 것으로 예상되는 BOM을 사용하여 UTF-8에서 이것을 실행했지만 파일 시작 부분에 추가 되었습니다.
Aaron Franke

14

메모장 사용해보기 ++

Windows에서는 메모장 ++을 사용하여 ISO-8859-1 에서 UTF-8 로 변환 할 수있었습니다 . 클릭 "Encoding"다음 "Convert to UTF-8".


13

자동 문자 세트 감지 기능을 갖춘 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됩니다.

이에 file -bi수단 :

  • -b, --brief 파일 이름 앞에 출력 줄을 추가하지 마십시오 (간단 모드).

  • -i, --mime file 명령이 사람이 읽을 수있는 기존의 문자열이 아닌 MIME 유형 문자열을 출력하도록합니다. 따라서 예를 들어 말할 수 text/plain; charset=us-ascii보다는 ASCII text. 이 sed명령 us-ascii은에 필요한 만큼만 ​​잘라냅니다 iconv.

find명령은 이러한 파일 관리 자동화에 매우 유용합니다. 여기를 클릭 find많음 .


3
적어도 내 버전에서는 Mac OS X에서 작동하도록이 솔루션을 약간 조정해야했습니다. find . -type f -iname *.txt -exec sh -c 'iconv -f $(file -b --mime-encoding "$1" | awk "{print toupper(\$0)}") -t UTF-8 > converted "$1" && mv converted "$1"' -- {} \;
Brian J. Miller

1
귀하의 코드는 MinGW-w64 (최신 버전)가 설치된 Windows 7에서도 작동했습니다. 공유해 주셔서 감사합니다!
silvioprog

@rmuller이 sed명령은 문자 인코딩의 자동 감지를 가능하게하는 목적으로 사용됩니다. 나는 이것을 지금 설명하기 위해 답을 넓혔다. 독자와 관련하여 남아있는 관련없는 의견을 삭제하는 것은 정중합니다. 감사합니다.
Sroo Stroobandt 2018 년

@SergeStroobandt 어쩌면 나는 충분히 명확하지 않았다. 내 요점은 "file -bi"대신 "file -b --mime-encoding"을 사용할 때 sed로 결과를 필터링 할 필요가 없다는 것입니다. 이 명령은 이미 파일 인코딩 만 반환합니다. 예를 들어 "us-ascii"
rmuller

이것은 실제로 Linux에서 나를 위해 아무것도하지 않는 것 같습니다. BOM과 함께 파일을 UTF-8로 저장했지만 BOM없이 UTF-8로 변환 할 것으로 예상했지만 그렇지 않았습니다.
Aaron Franke

3

PHP iconv ()

iconv("UTF-8", "ISO-8859-15", $input);


1
이 문장은 문자열을 변환 할 때는 훌륭하지만 파일에는 적합하지 않습니다.
jjwdesign

2

DOS / Windows : 코드 페이지 사용

chcp 65001>NUL
type ascii.txt > unicode.txt

명령 chcp을 사용하여 코드 페이지를 변경할 수 있습니다. 코드 페이지 65001은 UTF-8의 Microsoft 이름입니다. 코드 페이지를 설정 한 후 다음 명령으로 생성 된 출력은 코드 페이지로 설정됩니다.


1

속성 파일 (Java)을 작성하려면 일반적으로 Linux (mint 및 ubuntu 배포판)에서 이것을 사용합니다.

$ native2ascii filename.properties

예를 들면 다음과 같습니다.

$ cat test.properties 
first=Execução número um
second=Execução número dois

$ native2ascii test.properties 
first=Execu\u00e7\u00e3o n\u00famero um
second=Execu\u00e7\u00e3o n\u00famero dois

추신 : 특수 문자를 강요하기 위해 포르투갈어로 실행 번호 1 / 2를 썼습니다.

제 경우에는 처음으로 다음 메시지를 받았습니다.

$ native2ascii teste.txt 
The program 'native2ascii' can be found in the following packages:
 * gcj-5-jdk
 * openjdk-8-jdk-headless
 * gcj-4.8-jdk
 * gcj-4.9-jdk
Try: sudo apt install <selected package>

첫 번째 옵션 (gcj-5-jdk)을 설치하면 문제가 완료되었습니다.

나는 이것이 누군가를 돕기를 바랍니다.




0

내가 가장 좋아하는 도구는 두 가지 매우 편리한 기능을 가진 Jedit (자바 기반 텍스트 편집기)입니다.

  • 사용자가 다른 인코딩으로 텍스트를 다시로드 할 수있게하고 결과를 시각적으로 제어 할 수 있습니다.
  • 사용자가 저장하기 전에 인코딩 (및 줄 끝 문자)을 명시 적으로 선택할 수있게하는 또 하나

0

현재 문자셋이 표시되는 상태 표시 줄 (아래)의 오른쪽에있는 IntelliJ IDEA IDE에서로드 된 파일의 인코딩을 변경하기 만하면됩니다. 다시로드 또는 변환하라는 메시지가 표시되면 변환을 사용하십시오. 원본 파일을 미리 백업했는지 확인하십시오.


0

macOS GUI 응용 프로그램이 빵과 버터라면 SubEthaEdit 는 인코딩 변환을 위해 주로 사용하는 텍스트 편집기입니다. "변환 미리보기"를 사용하면 출력 인코딩에서 모든 유효하지 않은 문자를보고 수정 / 제거 할 수 있습니다.

그리고 지금은 오픈 소스 입니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.