Apa alat atau metode tercepat, termudah untuk mengonversi file teks antara set karakter?
Secara khusus, saya perlu mengkonversi dari UTF-8 ke ISO-8859-15 dan sebaliknya.
Semuanya berjalan: satu-baris dalam bahasa skrip favorit Anda, alat baris perintah atau utilitas lain untuk OS, situs web, dll.
Solusi terbaik sejauh ini:
Di Linux / UNIX / OS X / cygwin:
Gnu iconv disarankan oleh Troels Arvin paling baik digunakan sebagai filter . Tampaknya tersedia secara universal. Contoh:
$ iconv -f UTF-8 -t ISO-8859-15 in.txt > out.txt
Seperti yang ditunjukkan oleh Ben , ada konverter online menggunakan ikonv .
Gnu recode ( pengguna ) disarankan oleh Cheekysoft akan mengkonversi satu atau beberapa file di tempat . Contoh:
$ recode UTF8..ISO-8859-15 in.txt
Yang ini menggunakan alias lebih pendek:
$ recode utf8..l9 in.txt
Recode juga mendukung permukaan yang dapat digunakan untuk mengkonversi antara berbagai jenis dan penyandian akhir baris:
Ubah baris baru dari LF (Unix) ke CR-LF (DOS):
$ recode ../CR-LF in.txt
File encode Base64:
$ recode ../Base64 in.txt
Anda juga bisa menggabungkannya.
Mengonversi file UTF8 yang disandikan Base64 dengan ujung garis Unix ke file Latin 1 yang disandikan Base64 dengan ujung garis Dos:
$ recode utf8/Base64..l1/CR-LF/Base64 file.txt
Di Windows dengan Powershell ( Jay Bazuzi ):
PS C:\> gc -en utf8 in.txt | Out-File -en ascii out.txt
(Tidak ada dukungan ISO-8859-15; ia mengatakan bahwa rangkaian karakter yang didukung adalah unicode, utf7, utf8, utf32, ascii, bigendianunicode, default, dan oem.)
Edit
Apakah maksud Anda dukungan iso-8859-1? Menggunakan "String" melakukan ini misalnya untuk sebaliknya
gc -en string in.txt | Out-File -en utf8 out.txt
Catatan: Nilai enumerasi yang dimungkinkan adalah "Tidak Dikenal, String, Unicode, Byte, BigEndianUnicode, UTF8, UTF7, Ascii".
- CsCvt - Character Set Converter Kalytta adalah alat konversi berbasis perintah yang bagus untuk Windows.
sumber
gc -en Ascii readme.html | Out-File -en UTF8 readme.html
tetapi mengkonversi file ke utf-8 tetapi kemudian kosong! Notepad ++ mengatakan file tersebut berformat Ansi tetapi membaca seperti yang saya mengerti itu bahkan bukan charset yang valid ?? uk.answers.yahoo.com/question/index?qid=20100927014115AAiRExFrecode
akan bertindak sebagai filter juga jika Anda tidak memberikannya nama file, misalnya:recode utf8..l9 < in.txt > out.txt
enca
, Anda tidak perlu menentukan pengkodean input. Hal ini sering cukup hanya untuk menentukan bahasa:enca -L ru -x utf8 FILE.TXT
.iconv -f UTF-32 -t UTF-8 input.csv > output.csv
hanya sekitar tujuh ratus ribu baris yang disimpan, hanya sepertiga. Menggunakan versi in-place yangiconv -f UTF-32 -t UTF-8 file.csv
berhasil dikonversi semua 2 juta baris plus.Jawaban:
Pendekatan utilitas yang berdiri sendiri
Anda tidak harus menentukan argumen ini. Mereka akan default ke lokal Anda saat ini, yang biasanya UTF-8.
sumber
iconv -l | grep UTF
akan memberi tahu Anda semua penyandian terkait UTF yang didukung oleh ikonv Anda.chardet in.txt
untuk menghasilkan tebakan terbaik. Hasilnya dapat digunakan sebagai ENCODING diiconv -f ENCODING
.illegal input sequence at position
pesan), dan mengganti "aneh" karakter dengan karakter "mirip":iconv -c -f UTF-8 -t ISO-8859-1//TRANSLIT in.txt > out.txt
.ex
) di bawah . Info tambahan: (1) Anda (mungkin) tidak perlu menentukan opsi-f
(dari) denganiconv
. (2)file --mime-encoding <file/s>
perintah ini dapat membantu Anda mengetahui pengkodean di tempat pertama.file
perintah melaporkan sumber saya sebagai UTF-16 Little Endian; menjalankaniconv -f UTF-16 -t UTF-8...
mengubahnya salah ke ASCII, saya harus secara eksplisit menentukaniconv -f UTF-16LE...
untuk output UTF-8Coba VIM
Jika sudah,
vim
Anda dapat menggunakan ini:Tidak diuji untuk setiap pengkodean.
Bagian keren dari ini adalah Anda tidak perlu tahu sumber enkode
Perlu diketahui bahwa perintah ini memodifikasi file secara langsung
Bagian penjelasan!
+
: Digunakan oleh vim untuk langsung memasukkan perintah saat membuka file. Biasanya digunakan untuk membuka file pada baris tertentu:vim +14 file.txt
|
: Pemisah beberapa perintah (seperti;
dalam bash)set nobomb
: tidak ada utf-8 BOMset fenc=utf8
: Atur pengodean baru ke utf-8 doc linkx
: Simpan dan tutup filefilename.txt
: path ke file"
: qotes ada di sini karena pipa. (Jika tidak, bash akan menggunakannya sebagai pipa bash)sumber
vim -b
atauhead file.txt|cat -e
find -regextype posix-extended -type f -regex ".*\.(h|cpp|rc|fx|cs|props|xaml)" -exec vim +'set nobomb | set fenc=utf8 | x' {} \;
Di Linux Anda dapat menggunakan perintah pengodean ulang yang sangat kuat untuk mencoba dan mengonversi antara rangkaian karakter yang berbeda serta masalah garis akhir.recode -l akan menunjukkan kepada Anda semua format dan pengkodean yang dapat dikonversi oleh alat. Ini mungkin daftar yang SANGAT panjang.
sumber
LF
? Ada/CR
dan/CR-LF
tetapi tidak ada/LF
iconv (1)
Juga ada alat berbasis iconv dalam banyak bahasa.
sumber
Versi terpendek, jika Anda dapat mengasumsikan bahwa BOM input benar:
sumber
gc .\file-utf8.txt | sc -en utf7 .\file-utf7.txt
Set-Content
kerjanya lebih baik daripadaOut-File
?file-utf8.txt
file yang sama untuk input karena keduanya memiliki file output yang samafile-utf7.txt
.gc -en Ascii readme.html | Out-File -en UTF8 readme.html
tetapi mengkonversi file ke utf-8 tetapi kemudian kosong! Notepad ++ mengatakan file tersebut berformat Ansi tetapi membaca seperti yang saya mengerti itu bahkan bukan charset yang valid ?? uk.answers.yahoo.com/question/index?qid=20100927014115AAiRExFCoba ikonv fungsi Bash
Saya telah memasukkan ini ke dalam
.bashrc
:..untuk dapat mengonversi file seperti:
sumber

pada awal file.Coba Notepad ++
Pada Windows saya dapat menggunakan Notepad ++ untuk melakukan konversi dari ISO-8859-1 ke UTF-8 . Klik
"Encoding"
dan kemudian"Convert to UTF-8"
.sumber
Oneliner menggunakan find, dengan deteksi set karakter otomatis
Pengkodean karakter dari semua file teks yang cocok terdeteksi secara otomatis dan semua file teks yang cocok dikonversi ke
utf-8
pengkodean:Untuk melakukan langkah-langkah ini, sub shell
sh
digunakan dengan-exec
, menjalankan satu-kapal dengan-c
bendera, dan melewati nama file sebagai argumen posisi"$1"
dengan-- {}
. Di antaranya,utf-8
file output dinamai sementaraconverted
.Dimana
file -bi
artinya:-b
,--brief
Jangan tambahkan nama file ke saluran keluaran (mode singkat).-i
,--mime
Menyebabkan perintah file untuk menampilkan string tipe mime daripada yang lebih mudah dibaca manusia. Jadi bisa dikatakan misalnyatext/plain; charset=us-ascii
bukanASCII text
. Thesed
pemotongan perintah ini hanyaus-ascii
sebagai diperlukan olehiconv
.The
find
Perintah ini sangat berguna untuk otomatisasi manajemen file tersebut. Klik di sini untuk lebihfind
berlimpah .sumber
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"' -- {} \;
sed
Perintah ada di sana dengan sengaja, memungkinkan deteksi otomatis pengkodean karakter. Saya telah memperluas jawaban untuk menjelaskan ini sekarang. Akan sopan sehubungan dengan pembaca untuk menghapus komentar yang tidak relevan yang tersisa. Terima kasih.PHP iconv ()
iconv("UTF-8", "ISO-8859-15", $input);
sumber
DOS / Windows: gunakan halaman Kode
Perintah
chcp
dapat digunakan untuk mengubah halaman kode. Halaman kode 65001 adalah nama Microsoft untuk UTF-8. Setelah mengatur halaman kode, output yang dihasilkan oleh perintah berikut akan menjadi set halaman kode.sumber
untuk menulis file properti (Java) biasanya saya menggunakan ini di linux (distribusi mint dan ubuntu):
Sebagai contoh:
PS: Saya menulis Eksekusi nomor satu / dua di portugues untuk memaksa karakter khusus.
Dalam kasus saya, dalam eksekusi pertama saya menerima pesan ini:
Ketika saya menginstal opsi pertama (gcj-5-jdk) masalahnya selesai.
Saya harap ini membantu seseorang.
sumber
Dengan ruby:
Sumber: https://robots.thoughtbot.com/fight-back-utf-8-invalid-byte- berikutnyaences
sumber
Gunakan skrip Python ini: https://github.com/goerz/convert_encoding.py Bekerja pada platform apa pun. Membutuhkan Python 2.7.
sumber
Alat favorit saya untuk ini adalah Jedit (editor teks berbasis java) yang memiliki dua fitur yang sangat nyaman:
sumber
Cukup ubah penyandian file yang dimuat di IntelliJ IDEA IDE, di sebelah kanan bilah status (bawah), di mana charset saat ini ditunjukkan. Ini meminta untuk Muat Ulang atau Konversi, gunakan Konversi. Pastikan Anda membuat cadangan file asli terlebih dahulu.
sumber
Jika aplikasi macOS GUI adalah roti dan mentega Anda, SubEthaEdit adalah editor teks yang biasanya saya tuju untuk penguraian pengkodean - "pratinjau konversi" memungkinkan Anda untuk melihat semua karakter yang tidak valid dalam pengkodean keluaran, dan memperbaiki / menghapusnya.
Dan sekarang open-source , jadi yay untuk mereka 😉.
sumber
Seperti yang dijelaskan pada Bagaimana cara memperbaiki karakter pengkodean file? Synalyze It! memungkinkan Anda dengan mudah mengkonversi pada OS X antara semua penyandian yang didukung oleh perpustakaan ICU .
Selain itu Anda dapat menampilkan beberapa byte file yang diterjemahkan ke Unicode dari semua penyandian untuk melihat dengan cepat mana yang tepat untuk file Anda.
sumber