Encoding apa yang mengubah 测试 menjadi 娴嬭瘯?
UTF-8 → GBK Byte UTF-8 yang dibaca sebagai GBK. Keenam byte UTF-8 itu (E6 B5 8B E8 AF 95) dikelompokkan ulang menjadi tiga karakter GBK.
Tempel teks rusak dan dapatkan teks aslinya kembali. Setiap rantai encoding — UTF-8, GBK, Big5, Shift_JIS, EUC-KR, Windows-1252 — dicoba dan diperingkat, lengkap dengan rantainya. Gratis, privat, jalan di browser.
Tempel teks rusaknya. Setiap rantai encoding yang masuk akal dicoba dan hasilnya diperingkat — Anda tidak perlu tahu encoding mana yang merusaknya.
测试
UTF-8 → GBK
娴å¬ç˜¯
Windows-1252 / Latin-1 → UTF-8
测试
Windows-1252 / Latin-1 → GBK
测试
Windows-1251 → GBK
Lihat teks yang sama sebagai byte di semua encoding umum sekaligus — berguna saat Anda perlu tahu persis apa yang akan disimpan database atau protokol Anda.
| Encoding | Byte | Hex |
|---|---|---|
| UTF-8 | 6 | E4 B8 AD E6 96 87 |
| GBK | 4 | D6 D0 CE C4 |
| GB18030 | 4 | D6 D0 CE C4 |
| Big5 | 4 | A4 A4 A4 E5 |
| Shift_JIS | 4 | 92 86 95 B6 |
| EUC-KR | 4 | F1 E9 D9 FE |
Dibangun dan diverifikasi oleh tim engineering Go Tools.
UTF-8 → GBK Byte UTF-8 yang dibaca sebagai GBK. Keenam byte UTF-8 itu (E6 B5 8B E8 AF 95) dikelompokkan ulang menjadi tiga karakter GBK.
UTF-8 → Windows-1252 Byte UTF-8 yang sama, dibaca sebagai Windows-1252. Karena encoding itu satu byte, masing-masing dari enam byte tersebut menjadi karakter tersendiri.
Tidak terpulihkan Tidak. Byte-byte itu sudah dibuang saat dekode. Pulihkan yang masih bisa dari teks di sekitarnya, dan kembali ke sumber untuk sisanya.
3 vs 2 byte Tiga di UTF-8, dua di GBK dan Big5. Perbedaan itu sumber umum pemotongan ketika ukuran kolom ditentukan dalam byte, bukan dalam karakter.
Mojibake adalah yang Anda dapat ketika teks ditulis dengan satu character encoding lalu dibaca dengan encoding lain. Byte-nya utuh; hanya penafsirannya yang salah. Perbedaan itulah alasan pemulihan mungkin dilakukan: kalau Anda bisa menyimpulkan encoding mana yang menulis byte-nya dan encoding mana yang salah membacanya, kekeliruan itu bisa dijalankan mundur untuk mendapatkan teks aslinya.
Istilahnya berasal dari bahasa Jepang — 文字化け, kira-kira "perubahan karakter" — dan menjadi istilah baku dalam bahasa Inggris karena masalah ini endemik di komputasi Jepang jauh sebelum Unicode. Teks Mandarin, Jepang dan Korea jauh lebih sering terkena dibanding teks beraksara Latin, dan penyebabnya struktural: bahasa-bahasa itu butuh encoding multi-byte, dan encoding multi-byte saling tidak sepakat soal cara mengelompokkan byte. String beraksara Latin umumnya ASCII biasa, dan semua encoding sepakat soal ASCII.
Pemulihan gagal tepat pada satu situasi. Ketika decoder menemui byte yang tidak punya arti di encoding-nya, byte itu tidak disimpan — decoder menggantinya dengan U+FFFD lalu membuangnya. Karakter-karakter tersebut hilang permanen. Selebihnya bisa dibalik.
// The mistake, in three lines of JavaScript
const bytes = new TextEncoder().encode('测试'); // UTF-8: E6 B5 8B E8 AF 95
new TextDecoder('gbk').decode(bytes); // '娴嬭瘯' ← mojibake
new TextDecoder('windows-1252').decode(bytes); // '测试' ← same bytes, other mistake Tempel teks rusaknya dan alat ini yang mengenumerasi rantainya untuk Anda. Setiap kombinasi ditulis-sebagai dan dibaca-sebagai di antara UTF-8, GBK, GB18030, Big5, Shift_JIS, EUC-KR, Windows-1252 dan Windows-1251 dicoba.
Sebuah kandidat ditandai Exact hanya kalau menjalankannya kembali lewat rantai yang sama mereproduksi input Anda karakter demi karakter. Itu pemeriksaan deterministik — tebakan berperingkat tidak akan memberi tahu hasil mana yang bisa Anda percaya.
Setiap kandidat menyebut encoding yang menulis byte-nya dan encoding yang salah membacanya. Itu yang Anda butuhkan untuk memperbaiki sumbernya, alih-alih menambal string yang sama lagi minggu depan.
Kalau input sudah mengandung karakter pengganti, alat ini mengatakannya terus terang dan menandai semua kandidat sebagai partial. Informasi yang hancur saat dekode tidak akan kembali, dan berpura-pura sebaliknya cuma menghabiskan sore Anda.
Lihat teks apa pun sebagai byte hex di seluruh encoding yang didukung secara berdampingan, dan dekode hex mentah ke arah sebaliknya. Berguna untuk menentukan ukuran kolom, membaca packet capture dan memeriksa isi BLOB.
Proses dekode memakai TextDecoder milik browser itu sendiri. Tidak ada unggahan, tidak ada penyimpanan, tidak ada penulisan ulang URL — dan itu penting karena teks rusak biasanya datang langsung dari produksi.
娴嬭瘯
测试
Dua karakter Mandarin itu tersimpan dengan benar sebagai UTF-8 (byte E6 B5 8B E8 AF 95), lalu sebuah program membaca keenam byte tersebut sebagai GBK. GBK memasangkan byte dua-dua, jadi yang keluar tiga karakter, bukan dua. Inilah yang Anda dapat ketika berkas UTF-8 dibuka oleh aplikasi Windows lawas, atau ketika charset koneksi database disetel ke gbk sementara datanya UTF-8.
测试
测试
Byte yang sama, kekeliruan yang berbeda. Windows-1252 adalah encoding satu byte, sehingga masing-masing dari enam byte UTF-8 itu menjadi karakter tersendiri. Bahasa beraksara Latin terus-menerus kena versi ini: café menjadi café, naïve menjadi naïve. Tanda khasnya adalah Ã, Â, â dan tanda baca liar yang bermunculan berpasangan.
B2 E2 CA D4
测试
Kadang yang Anda hadapi bukan teks rusak, melainkan hex dump dari packet capture atau kolom BLOB. Tempel hex-nya ke bagian kedua lalu pilih encoding-nya. B2 E2 CA D4 adalah 测试 dalam GBK — dua karakter yang sama memakan enam byte di UTF-8 (E6 B5 8B E8 AF 95) dan sama sekali tidak bisa direpresentasikan di Windows-1252.
鏁版嵁搴�
(hanya sebagian)
数据库 ditulis sebagai UTF-8 lalu dibaca sebagai GBK, tetapi pasangan byte terakhir tidak punya arti di GBK sehingga decoder menggantinya dengan U+FFFD. Byte itu sudah hilang. Alat ini menandai keadaan tersebut alih-alih diam-diam menebak — Anda masih bisa memulihkan 数据 dari bagian depan string, tetapi karakter terakhirnya tidak terpulihkan dan Anda perlu kembali ke data sumber.
Langsung tempel saja — tidak perlu mengidentifikasi encoding lebih dulu. Potongan pendek sudah cukup; belasan karakter biasanya sudah mengunci rantainya.
Exact berarti rantainya kembali persis ke input Anda. Partial berarti tidak, jadi perlakukan hasilnya sebagai petunjuk.
Setiap kandidat menunjukkan encoding yang sebenarnya menulis teks itu dan encoding yang salah membacanya. Itu memberi tahu apa yang harus diperbaiki di hulu, bukan sekadar isi teksnya.
Bagian kedua menampilkan teks apa pun sebagai byte di semua encoding umum, dan mendekode hex mentah ke arah sebaliknya. Pakai untuk menentukan ukuran kolom atau memeriksa frame protokol.
Kalau sebuah string tampil dengan benar tetapi Anda tetap mengonversinya, Anda justru menciptakan mojibake yang tadinya ingin Anda hindari. Periksa tampilannya lebih dulu, dan catat bahwa font yang hilang tampil sebagai kotak (□□□) sedangkan masalah encoding tampil sebagai karakter yang salah.
iconv -f UTF-8 -t GBK correct.txt > broken.txt
# Pastikan dulu encoding yang sekarang file -I correct.txt # charset=utf-8 → tidak ada yang perlu dikonversi
Mengubah charset yang dideklarasikan pada sebuah kolom MySQL tidak mengodekan ulang byte yang sudah tersimpan di dalamnya. Mendeklarasikan data latin1 sebagai utf8 membuat server mengembalikan byte yang bukan UTF-8 valid, lalu driver menggantinya dengan U+FFFD — dan itu menghancurkannya.
ALTER TABLE t MODIFY c VARCHAR(255) CHARACTER SET utf8mb4;
-- Lewati dulu tipe biner agar byte-nya dipertahankan, bukan ditafsirkan ulang ALTER TABLE t MODIFY c VARBINARY(255); ALTER TABLE t MODIFY c VARCHAR(255) CHARACTER SET utf8mb4;
Kandidat yang ditandai Partial tidak lolos uji bolak-balik. Itu petunjuk yang layak ditelusuri, bukan jawaban untuk ditempel kembali ke database Anda. Kalau tidak ada satu pun yang keluar sebagai Exact, input-nya kemungkinan besar sudah kehilangan informasi — kembalilah ke byte sumbernya.
// Ambil kandidat pertama, apa pun kata badge-nya db.update(row.id, candidates[0].text);
// Hanya tulis kembali yang lolos uji bolak-balik if (candidates[0].lossless) db.update(row.id, candidates[0].text);
Memanggil encode pada sesuatu yang sudah berupa bytes, atau decode pada sesuatu yang sudah berupa string, akan melempar error di Python 3 alih-alih diam-diam berputar lewat ASCII. Dekode bytes sekali saja, di batas sistem, dan setelah itu perlakukan teks sebagai teks.
text = raw.decode('utf-8').encode('gbk').decode('utf-8') # Dekode sekali di batas sistem, dengan encoding yang benar-benar dipakai berkasnya
with open(path, encoding='gbk') as f:
text = f.read() VARCHAR(50) menjadi bug pemotongan.TextDecoder milik browser yang menyediakan tabelnya. Arah sebaliknya lebih rumit, karena TextEncoder hanya mendukung UTF-8 — jadi alat ini membangun peta balik dengan menyusuri ruang byte dan menanyakan arti setiap urutan kepada decoder. Pemetaannya karena itu selalu konsisten dengan perilaku browser itu sendiri, dan tidak ada tabel pencarian yang dikirim ke perangkat Anda.Content-Type HTTP, pemanggilan pembuka berkas, ekspor CSV. Setiap tempat yang jatuh ke "encoding sistem" adalah tempat bug yang sama muncul lagi begitu kodenya pindah ke mesin lain.utf8 di MySQL menyimpan paling banyak tiga byte per karakter, sehingga emoji dan sebagian karakter Mandarin yang jarang dipakai terpotong diam-diam. utf8mb4 adalah UTF-8 yang sebenarnya. Ini kegagalan yang berbeda dari mojibake dan alat pemulihan tidak bisa membantu, karena byte-nya memang benar-benar hilang.U+FFFD (ditampilkan sebagai �) lalu membuangnya. Langkah itu lossy dan tidak dapat dibalik. Jika teks Anda mengandung �, karakter-karakter tersebut hilang, alat apa pun yang Anda pakai. Halaman ini mengatakannya terus terang alih-alih menyodorkan tebakan yang terlihat meyakinkan. iso-8859-1 dan latin1 sebagai label untuk windows-1252. Keduanya hanya berbeda pada rentang 0x80–0x9F: ISO-8859-1 yang sesungguhnya berisi karakter kontrol di sana, sedangkan Windows-1252 berisi tanda baca tercetak seperti em dash dan kutip melengkung. Karena karakter tercetak itulah yang justru muncul dalam mojibake, Windows-1252 lebih berguna dari keduanya dan alat ini mencantumkannya sekali di bawah kedua nama. TextDecoder bawaannya, dan tidak ada yang dikirim lewat jaringan, ditulis ke penyimpanan, atau ditambahkan ke URL. Untuk alat yang satu ini hal itu lebih penting dari biasanya: teks rusak hampir selalu berasal dari log produksi, catatan pelanggan, atau dump database — persis hal-hal yang seharusnya tidak Anda tempel ke alat yang berjalan di server. iconv -f GBK -t UTF-8 input.txt > output.txt di macOS atau Linux, atau Get-Content -Encoding Default in.txt | Set-Content -Encoding UTF8 out.txt di PowerShell. Tempel dulu satu baris yang representatif di sini untuk memastikan encoding mana yang harus disebut dalam perintahnya — salah arah pada satu berkas utuh adalah cara masalah satu baris berubah menjadi masalah seribu baris. Encoding & Pemformatan
Tabel ASCII lengkap: 128 karakter dalam desimal, heksadesimal, oktal, dan biner, plus konverter dua arah antara teks dan kode ASCII. Karakter kontrol disertai escape sequence, notasi caret, dan di mana Anda menemuinya.
Encoding & Pemformatan
Decode dan encode Base64 online gratis. Konversi real-time dengan dukungan UTF-8 dan emoji. 100% privat di browser Anda. Tanpa pendaftaran.
Encoding & Pemformatan
Decode string Base64 atau data URI kembali menjadi gambar di browser. Pratinjau, baca dimensi & MIME, lalu unduh sebagai PNG, JPG, GIF, SVG. Tanpa upload.
Encoding & Pemformatan
Konversi CSV ke JSON di browser. RFC 4180, infer tipe, baris header, aman big-int. 100% privat, tanpa unggah.
Encoding & Pemformatan
Tempel file .env, dapatkan JSON seketika. Password, kunci API, dan token tak pernah keluar dari browser — parser dotenv 100% privat, tanpa unggah, gratis.
Encoding & Pemformatan
Decode entitas HTML dan unescape HTML online — gratis, tanpa daftar, 100% di browser Anda. Mengubah referensi named, desimal & hex kembali menjadi karakter; tidak pernah diunggah.