텍스트 파일 인코딩 변환


15

문자 인코딩 문제 로 텍스트 파일 (예 : 모국어 자막 파일, 페르시아어 )이 자주 발생합니다 . 이 파일들은 Windows에서 만들어지며 부적절한 인코딩 (ANSI로 간주)으로 저장됩니다.

여기에 이미지 설명을 입력하십시오

Windows에서는 아래와 같이 Notepad ++ 를 사용 하여 인코딩을 UTF-8로 변환 하여 쉽게 해결할 수 있습니다.

여기에 이미지 설명을 입력하십시오

그리고 읽을 수있는 올바른 결과는 다음과 같습니다.

여기에 이미지 설명을 입력하십시오

GNU / Linux에서 비슷한 솔루션을 많이 찾았지만 안타깝게도 제안 된 솔루션 (예 : 이 질문 )이 작동하지 않습니다. 무엇보다도, 나는 사람들이 제안 본 적이 iconv하고 recode있지만 이러한 도구와 운이 없었 없습니다. 다음을 포함하여 많은 명령을 테스트했으며 모두 실패했습니다.

$ recode ISO-8859-15..UTF8 file.txt
$ iconv -f ISO8859-15 -t UTF-8 file.txt > out.txt
$ iconv -f WINDOWS-1252 -t UTF-8 file.txt > out.txt 

이 중 어느 것도 효과가 없었습니다!

Ubuntu-14.04를 사용하고 있으며 메모장 ++처럼 작동하는 간단한 솔루션 (GUI 또는 CLI)을 찾고 있습니다.

"간단한"이라는 한 가지 중요한 측면은 사용자가 소스 인코딩을 결정할 필요가 없다는 것입니다. 대신 소스 인코딩은 도구에서 자동으로 감지해야하며 사용자는 대상 인코딩 만 제공해야합니다. 그럼에도 불구하고, 소스 인코딩을 제공해야하는 작동 솔루션에 대해서도 알게되어 기쁩니다.

다른 솔루션을 조사하기 위해 테스트 사례가 필요한 경우 위의 예제는 이 링크를 통해 액세스 할 수 있습니다 .


2
시도하십시오 : vim '+set fileencoding=utf-8' '+wq' file.txt.
muru

Farsi는 있어야 iso-639하지만 iconv또는 에서 사용할 수없는 것 같습니다 recode. 적어도의 출력에서 ​​볼 수 없습니다 iconv -l.
terdon

@muru 나는 ​​당신의 제안을 테스트 vim했지만 작동하지 않았습니다.
Seyed Mohammad

@SeyedMohammad는 여전히 동일하게 보입니까?
muru

@muru 응! 변경 없음.
Seyed Mohammad

답변:


12

페르시아어 텍스트가있는 이러한 Windows 파일은 Windows-1256으로 인코딩됩니다 . 따라서 시도한 OP와 비슷한 명령으로 다른 문자 집합을 사용하여 해독 할 수 있습니다. 즉:

recode Windows-1256..UTF-8 <Windows_file.txt > UTF8_file.txt
(원래 포스터의 불만에 기각, 의견 참조)

iconv -f Windows-1256 Windows_file.txt > UTF8_file.txt

이것은 LANG 환경 변수가 UTF-8 로케일로 설정되어 있다고 가정합니다. 현재 로캘에 관계없이 모든 인코딩 (UTF-8 또는 기타)으로 변환하려면 다음과 같이 말할 수 있습니다.

iconv -f Windows-1256 Windows_file.txt -t ${output_encoding} > ${output_file}

원본 포스터는 또한 텍스트 레코딩 도구 (레코딩, iconv)의 시맨틱과 혼동됩니다. 소스 인코딩 ( source.. 또는 -f)의 경우 파일 을 만든 프로그램 에서 파일을 저장할 인코딩을 지정해야합니다 . 읽기를 시도하지만 실패하는 프로그램에서 모모 베이크 문자를 기반으로 한 일부 (순진한) 추측은 아닙니다. 페르시아어 텍스트에 대해 ISO-8859-15 또는 WINDOWS-1252를 사용하는 것은 분명히 난제입니다. 이러한 인코딩에는 페르시아어 문자가 포함되어 있지 않습니다.


@Seyed Mohammad : 이제 명령이 명시 적으로 지정되었습니다.
Incnis Mrsi

감사! 두 번째 명령 (을 사용하는 명령 iconv)이 작동했습니다. 그러나 첫 번째 (을 사용하여 recode)가 제대로 작동하지 않아 출력이 여전히 횡설수설되었습니다. iconv명령 만 포함하도록 답변을 편집 하면 답변으로 표시됩니다.
Seyed Mohammad 14 년

1
또한 LANG 변수 설정을 사용하지 않기 위해 할 수있는 iconv -f WINDOWS-1256 -t UTF-8 in.txt > out.txt일을 테스트했습니다. 따라서 이런 식으로 명령을 편집하는 것이 좋습니다.
Seyed Mohammad

나는 여기에 또 다른 대답에서 설명한 작업 명령을 기반으로 유용한 스크립트를 작성했습니다. 다른 페르시아 리눅스 사용자들에게 도움이 되길 바랍니다.
Seyed Mohammad

@karel : 감사합니다.“불만”은 동사입니다 – 문구는 문법적으로 작성되었습니다.
Incnis Mrsi

1

외에도에서 iconv자체적으로 또는 스크립트에서 하나 매우 유용한 도구이다, 나는 그리스 캐릭터 세트 (윈도우 1253 + ISO-8859-7)에 대한 동일한 문제가 알아 내려고 볼 수있는 정말 간단한 해결책이있다.

당신이해야 할 모든 텍스트 파일을 열 수 있습니다 gedit에서의 "열기"대화를 통해 하고 두 번 클릭하지 . 대화 상자의 맨 아래에 인코딩 드롭 다운이 있습니다. "자동 감지 됨"으로 있습니다. "Windows-125x"또는 다른 적절한 코드 세트로 변경하면 Gedit에서 텍스트를 완벽하게 읽을 수 있습니다. 그런 다음 UTF-8 인코딩을 사용하여 저장하면 나중에 동일한 문제가 다시 발생하지 않을 것입니다.


1

문제에 대한 보완 솔루션으로 다음을 기반으로 유용한 Bash 스크립트를 준비했습니다. iconv 명령을 Incnis Mrsi의 답변을 :

#!/bin/bash

if [ $# -lt 1 ]
then
   echo 'Specify at least one file to fix.'
   exit 1
fi

# Temp file to store conversion attempt(s).
tmp='tmp.fixed'

for file in "$@"
do
  # Try to fix the file encoding.
  if iconv -f WINDOWS-1256 "$file" -t UTF-8 > $tmp; then
    echo "Fixed: '$file'"
    cat $tmp > "$file"
  else
    echo "Failed to fix: '$file'"
  fi
done
rm $tmp

이 스크립트를 다른 이름으로 저장 fix-encoding.sh 사용하여 실행 권한을 부여하고 chmod +x fix-encoding.sh다음과 같이 사용하십시오.

./fix-encoding.sh myfile.txt my2ndfile.srt my3rdfile.sub

이 스크립트는 입력으로 제공된 파일 수의 인코딩을 수정하려고 시도합니다. 파일은 제자리에 고정되므로 내용을 덮어 씁니다.


변수는 열린 텍스트뿐만 아니라 큰 따옴표로 확장되므로 "  …  "에서 $ file을 넣을 필요는 없습니다 . bash는 '$ file' 만 문자 그대로 달러 기호와 함께 렌더링합니다.
Incnis Mrsi

'Incnis Mrsi'가 게시 한 답변에 대한 답변으로 언급했듯이 해당 솔루션이 작동하지 않아이 스크립트도 작동합니다.
Seyed Mohammad

1

이것이 Farsi와 함께 작동하는지 모르겠습니다 : Gedit을 사용하고 잘못된 인코딩으로 결함을 제공하며 UTF-8로 변환 할 항목을 선택할 수 있습니다. 텍스트가 켜져 있지 않은 형식이지만 여기에 스크린 샷이 있습니다. !

여기에 이미지 설명을 입력하십시오

죄송합니다. 마침내 텍스트 파일을 다 읽었으므로 이제 모두 변환되었습니다.

나는 메모장 ++도 좋아했지만 여전히 그리워.


Gedit는 문제를 해결할 수 없습니다. Gedit는 내 파일에 대한 인코딩 오류를 표시하지 않지만 파일을 수정하더라도 해결할 수 없습니다. 또한 Gedit에서 UTF-8 인코딩으로 "다른 이름으로 저장"을 시도했지만 문제가 해결되지 않습니다.
Seyed Mohammad

1

CLI 대신 GUI에서 작업하는 것을 좋아한다면,

  1. Geany로 파일 열기 (편집기)
  2. 파일 메뉴로 이동 -> 다른 이름으로 다시로드
  3. 언어에서 식별 할 수있는 문자로 횡설수설을 변경하려면 가정 된 인코딩을 선택하십시오. 예를 들어 그리스어 하위를 읽으려면 서유럽 어 -> 그리스어 (Windows-1253) 로 다시로드합니다.
  4. 이동 문서 메뉴> 설정 인코딩 -> 유니 코드 -> UTF-8
  5. 저장

작동하지 않습니다 ..
Aurimas

0

내가 찾은 작업 솔루션 은 프리웨어이며 Linux에서 사용할 수 있는 Microsoft Visual Studio Code 텍스트 편집기를 사용하는 것입니다.

인코딩을 변환하려는 파일을 VS-Code로 엽니 다. 창 하단에는 몇 개의 버튼이 있습니다. 그중 하나는 아래와 같이 파일 인코딩과 관련이 있습니다.

여기에 이미지 설명을 입력하십시오

이 버튼을 클릭하면 두 항목이 포함 된 오버 헤드 메뉴가 나타납니다. 이 메뉴에서 아래와 같이 "인코딩으로 다시 열기"옵션을 선택하십시오.

여기에 이미지 설명을 입력하십시오

아래와 같이 다른 인코딩 목록이 포함 된 다른 메뉴가 열립니다. 이제 "아랍어 (Windows 1256)"를 선택하십시오 :

여기에 이미지 설명을 입력하십시오

이렇게하면 횡설수설 텍스트가 다음과 같이 수정됩니다.

여기에 이미지 설명을 입력하십시오

이제 인코딩 버튼을 다시 클릭하고 이번에는 아래와 같이 "인코딩으로 저장"옵션을 선택하십시오.

여기에 이미지 설명을 입력하십시오

그리고 새로운 메뉴에서 "UTF-8"옵션을 선택하십시오 :

여기에 이미지 설명을 입력하십시오

UTF-8 인코딩을 사용하여 수정 된 파일을 저장합니다.

여기에 이미지 설명을 입력하십시오

끝난! :)


"인코딩으로 저장"을 시도했지만 이전 인코딩 agian, 내 경우에는 UTF8을 보여줍니다
chaitanya
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.