Bagaimana mengubah pengkodean dari teks ASCII yang diperluas dengan ISO-Non, dengan terminator garis CRLF ke UTF-8?


21

Saya punya file 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

Dan ada beberapa karakter yang disandikan salah:

trwa³y, sta³y, usuwaæ

Bagaimana saya bisa mengubah penyandian file ini ke UTF-8? Saya telah mencoba cara berikut sejauh ini:

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

Mungkin saya harus entah bagaimana menggunakan extended ASCII( high ASCII) tetapi tidak dapat menemukannya di iconvdaftar penyandian.


2
dapatkah Anda mengunggah file ke suatu tempat?
janos

Ada daftar praktis penyandian ISO 8-bit, semua ditunjukkan berdampingan, di sini . Apakah ada di antara mereka yang mendekati apa yang Anda amati dalam file Anda? Sebagai contoh, jika Anda berpikir "sta³y" harus "stacy", maka cari encoding yang memiliki "c" untuk apa pun kode hex aneh di kata itu.
John1024

Mungkin 90% dari waktu, "Non-ISO extended-ASCII text" akan menjadi file yang disandikan dalam codepage Windows 1252 . "Ini mungkin pengkodean karakter 8-bit yang paling banyak digunakan di dunia." (Wikipedia). Cobalah dulu:iconv -f windows-1252 -t utf-8 file
nyov

Jawaban:


33

file memberi tahu Anda "Teks ASCII yang diperluas non-ISO" karena mendeteksi bahwa ini adalah:

  • kemungkinan besar file "teks" dari kurangnya karakter kontrol (nilai byte 0–31) selain jeda baris;
  • “Extended-ASCII” karena ada karakter di luar rentang ASCII (nilai byte ≥128);
  • "Non-ISO" karena ada karakter dalam rentang 128–159 ( ISO 8859 menyimpan rentang ini untuk karakter kontrol).

Anda harus mencari tahu di mana penyandian file ini tampaknya. Anda dapat mencoba pengenalan otomatis Enca . Anda mungkin perlu mendorongnya ke arah yang benar dengan mengatakannya dalam bahasa apa teks itu.

enca x.txt
enca -L polish x.txt

Untuk mengonversi file, berikan -xopsi:enca -L polish x.txt -x utf8 >x.utf8.txt

Jika Anda tidak dapat atau tidak ingin menggunakan Enca, Anda dapat menebak pengodeannya secara manual. Sedikit melihat sekeliling memberi tahu saya bahwa ini adalah teks Polandia dan kata-katanya trwały, stały, usuważ, jadi kami sedang mencari terjemahan mana ³łdan æż. Ini terlihat seperti latin-2 atau latin-10 atau lebih mungkin (diberikan "non-ISO" CP1250 yang Anda lihat sebagai latin1 . Untuk mengonversi file ke UTF-8, Anda dapat menggunakan recode atau iconv .

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

Saya tidak ambil bagian dengan < x.txt > x.utf8.txtMengapa kita menggunakan <itu >? Bagaimana cara kerjanya?
Filip Bartuzi


1

Buka file teks dengan gedit dan dalam dialog "save as .." Anda akan melihat pengkodean saat ini.


0

Apakah Anda mencoba mencari tahu apa pengkodean yang sebenarnya adalah x.txt? Anda akan mendapatkan daftar penyandian yang didukung

iconv --list

Kadang-kadang terjadi pada saya bahwa saya mendapatkan ketidakcocokan antara latin1 dan utf8. Maka sering membantu untuk mengubahnya dari dan kembali ke utf8 dan sebaliknya.


0

Saya telah membuat skrip konversi otomatis menggunakan enca library, saya menggunakannya pada NAS saya untuk mengonversi subtitle ke UTF-8 tetapi dapat digunakan untuk konversi otomatis apa pun

Jangan ragu untuk menggunakan :)

EDIT:

#!/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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.