Skip to content

Konversi Encoding & Pemulihan Teks Rusak (Mojibake)

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.

Tanpa Pelacakan Berjalan di Browser Gratis
Semuanya didekode secara lokal di browser Anda — teks yang Anda tempel tidak pernah meninggalkan perangkat ini.

Pulihkan teks rusak

Tempel teks rusaknya. Setiap rantai encoding yang masuk akal dicoba dan hasilnya diperingkat — Anda tidak perlu tahu encoding mana yang merusaknya.

Coba ini

Teks asli yang paling mungkin

4 kandidat
  1. 测试

    Exact

    UTF-8 → GBK

  2. 娴嬭瘯

    Exact

    Windows-1252 / Latin-1 → UTF-8

  3. 测试

    Exact

    Windows-1252 / Latin-1 → GBK

  4. 测试

    Exact

    Windows-1251 → GBK

Konversi dan periksa encoding

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

Setiap rantai encoding yang ditampilkan di halaman ini dihasilkan oleh mesin yang sama dengan yang dijalankan halaman ini, dan pemeriksaan bolak-balik di balik badge Exact diassert dalam suite unit test terhadap urutan byte yang sudah diketahui. — Go Tools Team · Sep 8, 2026

Dibangun dan diverifikasi oleh tim engineering Go Tools.

Jawaban singkat

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.

Apa yang mengubah 测试 menjadi 测试?

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.

Bisakah teks yang mengandung � dipulihkan?

Tidak terpulihkan Tidak. Byte-byte itu sudah dibuang saat dekode. Pulihkan yang masih bisa dari teks di sekitarnya, dan kembali ke sumber untuk sisanya.

Berapa byte satu karakter Mandarin?

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.

Apa itu mojibake?

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

Apa yang dilakukan alat ini

Tidak perlu tahu encoding-nya

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.

Hasil Exact diverifikasi, bukan ditebak

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.

Rantainya ditampilkan, bukan disembunyikan

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.

Jujur soal teks yang tidak terpulihkan

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.

Tampilan byte di semua encoding sekaligus

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.

Tidak ada yang keluar dari browser Anda

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.

Contoh kasus

UTF-8 dibaca sebagai GBK — kasus klasiknya

娴嬭瘯
测试

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.

UTF-8 dibaca sebagai Windows-1252 — varian Barat

测试
测试

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.

Byte yang sudah Anda pegang dalam bentuk hex

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.

Teks yang tidak bisa dipulihkan

鏁版嵁搴�
(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.

Cara memakai alat ini

  1. 1

    Tempel teks rusaknya

    Langsung tempel saja — tidak perlu mengidentifikasi encoding lebih dulu. Potongan pendek sudah cukup; belasan karakter biasanya sudah mengunci rantainya.

  2. 2

    Baca kandidat teratas dan badge-nya

    Exact berarti rantainya kembali persis ke input Anda. Partial berarti tidak, jadi perlakukan hasilnya sebagai petunjuk.

  3. 3

    Periksa rantai encoding-nya

    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.

  4. 4

    Periksa byte-nya kalau perlu

    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.

Kesalahan yang justru memperburuk

Mengonversi teks yang sebenarnya tidak rusak

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.

✗ Salah
iconv -f UTF-8 -t GBK correct.txt > broken.txt
✓ Benar
# Pastikan dulu encoding yang sekarang
file -I correct.txt   # charset=utf-8 → tidak ada yang perlu dikonversi

Mendeklarasikan charset yang tidak dimiliki datanya

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.

✗ Salah
ALTER TABLE t MODIFY c VARCHAR(255) CHARACTER SET utf8mb4;
✓ Benar
-- 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;

Memercayai pemulihan sebagian

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.

✗ Salah
// Ambil kandidat pertama, apa pun kata badge-nya
db.update(row.id, candidates[0].text);
✓ Benar
// Hanya tulis kembali yang lolos uji bolak-balik
if (candidates[0].lossless) db.update(row.id, candidates[0].text);

Menganggap kebiasaan Python 2 masih berlaku

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.

✗ Salah
text = raw.decode('utf-8').encode('gbk').decode('utf-8')
✓ Benar
# Dekode sekali di batas sistem, dengan encoding yang benar-benar dipakai berkasnya
with open(path, encoding='gbk') as f:
    text = f.read()

Kapan Anda membutuhkannya

Migrasi database menghasilkan sampah
Tabel MySQL lawas yang dideklarasikan latin1 padahal sebenarnya menyimpan byte UTF-8 adalah sumber tunggal yang paling umum. Tempel satu baris rusak di sini untuk memastikan rantai yang sebenarnya sebelum Anda menulis ALTER TABLE — menjalankan konversi ke arah yang salah mengubah masalah yang masih bisa dipulihkan menjadi permanen.
CSV yang dibuka di Excel tampil kacau
Excel di Windows masih mengasumsikan code page sistem untuk berkas CSV tanpa BOM, sehingga hasil ekspor UTF-8 keluar sebagai mojibake. Pastikan rantainya di sini, lalu ekspor ulang dengan BOM atau impor lewat text wizard dengan encoding yang disetel eksplisit.
Berkas log dari layanan lawas
Aplikasi yang dibangun untuk GBK atau Shift_JIS menulis log dalam encoding tersebut, sementara agregator log modern membaca semuanya sebagai UTF-8. Tempel satu baris untuk memulihkannya — dan karena tidak ada yang diunggah, Anda bisa melakukannya dengan log produksi.
Nama berkas rusak gara-gara arsip ZIP
Format ZIP tidak punya field encoding, jadi arsip yang dibuat di Windows Tiongkok atau Jepang membawa nama berkas dalam GBK atau Shift_JIS yang dibaca perkakas Unix sebagai UTF-8. Pulihkan nama aslinya di sini sebelum Anda mengganti nama apa pun.
Menentukan ukuran kolom database
Tampilan byte menunjukkan teks yang sama di setiap encoding sekaligus. Satu karakter Mandarin butuh 3 byte di UTF-8 tetapi 2 di GBK, dan perbedaan semacam itulah yang mengubah VARCHAR(50) menjadi bug pemotongan.

Bagaimana mojibake terjadi

Byte bertahan, maknanya tidak
Encoding memetakan karakter ke byte; dekode memetakan byte kembali ke karakter. Mojibake adalah dekode dengan peta yang keliru. Byte-nya sendiri tidak pernah rusak, dan itulah sebabnya menjalankan dekode yang keliru itu secara mundur memulihkan teks asli dengan persis — sepanjang dekode yang keliru tadi tidak membuang apa pun.
Mengapa teks CJK paling menderita
ASCII menempati 0x00–0x7F dan semua encoding umum sepakat soal itu, jadi teks Inggris lewat tanpa cedera. Mandarin, Jepang dan Korea butuh urutan multi-byte, dan encoding-encoding itu tidak sepakat soal cara mengelompokkannya. UTF-8 memakai tiga byte per karakter Mandarin; GBK memakai dua. Umpankan byte UTF-8 ke decoder GBK dan pengelompokannya bergeser, menghasilkan jumlah karakter yang berbeda dengan isi yang berbeda pula.
Uji bolak-balik
Untuk setiap rantai kandidat, alat ini mengodekan ulang teks hasil pemulihan dengan encoding pertama lalu mendekodenya lagi dengan encoding kedua. Kalau itu mereproduksi input dengan persis, rantai tersebut menjelaskan setiap karakter dan kandidatnya ditandai Exact. Kandidat yang gagal tetap ditampilkan, karena pemulihan sebagian sering sudah cukup untuk mengenali teksnya meski tidak bisa mereproduksinya.
Dari mana tabel encoding-nya berasal
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.
Heuristik pemeringkatan, dan batasnya
Di luar uji bolak-balik, kandidat dinilai dari seberapa banyak teksnya berupa karakter Mandarin umum (yang lead byte GBK-nya jatuh di 0xB0–0xF7), dikurangi penalti untuk karakter pengganti, katakana setengah lebar dan karakter kontrol. Katakana setengah lebar adalah sinyal Shift_JIS yang kuat karena teks Jepang normal nyaris tidak pernah memakainya. Ini heuristik; ia memecah seri, ia tidak menetapkan kebenaran.

Mencegahnya terulang

Perbaiki sumbernya, bukan cuma string-nya
Rantai encoding yang tertera di bawah setiap kandidat memberi tahu komponen mana yang salah konfigurasi. Menambal teksnya tanpa membetulkan charset koneksi, pembaca berkas, atau setelan ekspor berarti mengulang pekerjaan yang sama besok dengan data baru.
Pastikan arahnya sebelum mengonversi satu berkas utuh
Jalankan dulu satu baris yang representatif lewat halaman ini. Mengonversi ke arah yang salah bisa memunculkan karakter pengganti, dan tidak seperti kekeliruan aslinya, langkah itu tidak bisa dibalik.
Setel encoding secara eksplisit di mana-mana
Charset koneksi database, 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.
Pilih utf8mb4 alih-alih utf8 di MySQL
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.
Simpan byte aslinya sampai perbaikannya terverifikasi
Buat salinan sebelum mengonversi apa pun. Selama byte aslinya masih ada, setiap dekode yang salah bisa dibalik — begitu tertimpa karakter pengganti, tidak ada alat di halaman ini atau di mana pun yang bisa mengembalikannya.

Pertanyaan yang sering diajukan

Bagaimana cara memperbaiki teks Mandarin yang tampil sebagai karakter acak?
Tempel teks rusak itu ke kotak di bagian atas halaman ini. Alat ini mencoba setiap rantai encoding yang masuk akal lalu memeringkat hasilnya, jadi Anda tidak perlu mengidentifikasi encoding-nya sendiri. Pada sebagian besar kasus jawabannya adalah teks UTF-8 yang dibaca sebagai GBK (Anda akan melihat karakter seperti 娴嬭瘯) atau teks UTF-8 yang dibaca sebagai Windows-1252 (Anda akan melihat 测试). Keduanya dipulihkan secara persis.
Apa yang sebenarnya diverifikasi oleh badge Exact?
Alat ini menjalankan pemulihannya secara terbalik. Teks hasil pemulihan dikodekan ulang dengan encoding pertama pada rantai, lalu byte-nya didekode lagi dengan encoding kedua. Jika hasilnya mereproduksi input Anda karakter demi karakter, rantai itu menjelaskan sepenuhnya apa yang Anda tempel dan badge-nya menampilkan Exact. Ini pemeriksaan bolak-balik yang deterministik, bukan skor kemiripan — itulah sebabnya hasil Exact bisa diandalkan dengan cara yang tidak dimiliki tebakan berperingkat.
Mengapa sebagian teks rusak tidak pernah bisa dipulihkan?
Karena kerusakannya terjadi sebelum Anda melihatnya. Ketika decoder menemui urutan byte yang tidak punya arti di encoding-nya, byte itu tidak dipertahankan — decoder menggantinya dengan 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.
Apa bedanya GBK, GB2312 dan GB18030?
Ketiganya adalah tiga generasi dari keluarga yang sama, masing-masing superset dari pendahulunya. GB2312 (1980) mencakup 6.763 karakter Mandarin sederhana — cukup untuk teks sehari-hari. GBK (1995) memperluasnya menjadi sekitar 21.000 karakter, termasuk bentuk tradisional. GB18030 (2000, wajib di Tiongkok) mencakup seluruh Unicode. Untuk memulihkan mojibake, GBK hampir selalu pilihan yang tepat, karena perangkat lunak yang menyebabkan masalahnya biasanya memang ditulis untuk GBK.
Apakah ISO-8859-1 sama dengan Windows-1252?
Menurut standarnya tidak, tetapi di setiap browser ya. WHATWG Encoding Standard — yang diimplementasikan browser — memperlakukan 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.
Apakah teks saya diunggah ke suatu tempat?
Tidak. Semua proses dekode berjalan di browser Anda memakai 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.
Bisakah saya mengonversi satu berkas utuh, bukan cuma potongan?
Halaman ini menangani teks yang Anda tempel. Untuk berkas utuh, pakai command line: 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.
Mengapa alat ini menampilkan beberapa kandidat, bukan satu jawaban?
Karena lebih dari satu rantai bisa menghasilkan teks yang terbaca, dan alat ini tidak menyembunyikannya dari Anda. Kandidat diurutkan dengan rantai yang konsisten (Exact) lebih dulu, lalu menurut heuristik keterbacaan yang memberi nilai pada karakter Mandarin umum dan menghukum karakter pengganti, katakana setengah lebar serta karakter kontrol. Heuristik itu pemecah seri, bukan orakel. Ketika dua kandidat sama-sama masuk akal, rantai encoding yang tertera di bawah masing-masing memberi tahu Anda mana yang cocok dengan asal data Anda.