CRLF 줄 종결자를 사용하여 비 ISO 확장 ASCII 텍스트에서 UTF-8로 인코딩을 변경하는 방법은 무엇입니까?


21

txt 파일이 있습니다.

$ file -i x.txt
x.txt: text/plain; charset=unknown-8bit
$ file x.txt 
x.txt: Non-ISO extended-ASCII text, with CRLF line terminators

그리고 잘못 인코딩 된 문자가 있습니다.

trwa³y, sta³y, usuwaæ

이 파일의 인코딩을 UTF-8로 어떻게 변경합니까? 지금까지 다음과 같은 방법으로 시도했습니다.

$ iconv -f ASCII -t UTF-8 x.txt
                puiconv: illegal input sequence at position 4

어쩌면 extended ASCII( high ASCII)를 사용해야 하지만 iconv인코딩 목록 에서 찾을 수 없습니다 .


2
파일을 어딘가에 업로드 할 수 있습니까?
janos

여기에 나란히 표시되는 편리한 8 비트 ISO 인코딩 목록이 있습니다 . 파일에서 관찰 한 내용에 가깝게 보이는 것이 있습니까? 예를 들어, "sta³y"가 "stacy"여야한다고 생각되면 해당 단어에 이상한 16 진 코드가있는 코드가 "c"인 인코딩을 찾으십시오.
John1024

아마도 90 %의 시간 인 "비 ISO 확장 ASCII 텍스트"는 Windows 1252 코드 페이지로 인코딩 된 파일 입니다. "아마도 세계에서 가장 많이 사용되는 8 비트 문자 인코딩 일 것입니다." (위키 백과). 먼저 시도해보십시오 :iconv -f windows-1252 -t utf-8 file
nyov

답변:


33

file “비 ISO 확장 ASCII 텍스트”는 다음과 같은 것을 감지하므로 알려줍니다.

  • 줄 바꿈 이외의 제어 문자 (바이트 값 0-31)가없는 "텍스트"파일 일 가능성이 높습니다.
  • ASCII 범위를 벗어난 문자가 있기 때문에 "확장 -ASCII"(바이트 값 ≥128);
  • 128–159 범위의 문자가 있기 때문에“비 ISO”( ISO 8859 는 제어 문자를 위해이 범위를 예약합니다).

이 파일이 어떤 인코딩으로되어 있는지 알아 내야합니다. Enca 의 자동 인식을 시도 할 수 있습니다 . 텍스트가 어떤 언어로되어 있는지 알려 주면 올바른 방향으로 조금 이동해야 할 수도 있습니다.

enca x.txt
enca -L polish x.txt

파일을 변환하려면 다음 -x옵션을 전달하십시오 .enca -L polish x.txt -x utf8 >x.utf8.txt

Enca를 사용할 수 없거나 사용하지 않으려면 인코딩을 수동으로 추측 할 수 있습니다. 조금 둘러 보면 이것이 폴란드어 텍스트이고 단어가 trwały, stały, usuważ라고 말했기 때문에 ³łæ→ 의 번역을 찾고 ż있습니다. 등이 보이는 2 라틴어 또는 라틴어-10 또는 그 이상의 가능성 (주어진 "비 ISO" CP1250은 당신이있는 거보기로 라틴 . UTF-8로 파일을 변환하려면, 당신이 사용할 수있는 레코딩 또는 의 iconv를 .

recode CP1250..utf8 <x.txt >x.utf8.txt
iconv -f CP1250 -t UTF-8 <x.txt >x.utf8.txt

내가 가진 부분을하지 않는 < x.txt > x.utf8.txt우리가 사용하는 이유는 무엇입니까 <다음과 >? 어떻게 작동합니까?
Filip Bartuzi

@FilipBartuzi <입력 및 출력 리디렉션을 각각> 수행하십시오 .
Gilles 'SO- 악마 그만'

1

gedit로 텍스트 파일을 열고 "다른 이름으로 저장."대화 상자에 현재 인코딩이 표시됩니다.


0

x.txt가 정확한 인코딩을 찾으려고 했습니까? 지원되는 인코딩 목록이 제공됩니다.

iconv-목록

때로는 latin1과 utf8이 일치하지 않습니다. 그런 다음 종종 utf8로 변환하거나 utf8로 변환하거나 그 반대로 변환하는 데 도움이됩니다.


0

enca 라이브러리를 사용하여 자동 변환 스크립트 를 만들었고 NAS에서 자막을 UTF-8로 변환하는 데 사용하지만 자동 변환에 활용할 수 있습니다

자유롭게 사용하십시오 :)

편집하다:

#!/bin/bash
LANGUAGE=czech
TO=utf8
CONVERT="enca -L $LANGUAGE -x $TO"

# Find and onvert
find ./ -type f -name "*.srt" | while read fn; do
  IS_TARGET=`enca "${fn}" | egrep -ow -m 1 'UTF-8|Unrecognized|KOI8-CS2|7bit ASCII|UCS-2|Macintosh Central European'`

    if [ "$IS_TARGET" != "UTF-8" ] &&
       [ "$IS_TARGET" != "UCS-2" ] &&
       [ "$IS_TARGET" != "Macintosh Central European" ] &&
       [ "$IS_TARGET" != "Unrecognized" ] &&
       [ "$IS_TARGET" != "7bit ASCII" ] &&
       [ "$IS_TARGET" != "KOI8-CS2" ]; then

        echo "${fn} ---- Will be converted!"
    # optional backup of original srt
        # cp "${fn}" "${fn}.bak"
        $CONVERT "${fn}"
    fi  

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