测试 karakterlerini 娴嬭瘯 hâline hangi kodlama getirir?
UTF-8 → GBK GBK olarak okunan UTF-8 baytları. Altı UTF-8 baytı (E6 B5 8B E8 AF 95) yeniden gruplanarak üç GBK karakterine dönüşür.
Bozuk karakterleri yapıştırın, özgün metni geri alın. UTF-8, GBK, Big5, Shift_JIS, EUC-KR ve Windows-1252 arasındaki her makul kodlama zinciri denenir, sıralanır ve zincir açıkça gösterilir. Ücretsiz, tarayıcınızda çalışır.
Bozuk metni yapıştırın. Her makul kodlama zinciri denenir ve sonuçlar sıralanır — hangi kodlamanın işi bozduğunu bilmenize gerek yok.
测试
UTF-8 → GBK
娴å¬ç˜¯
Windows-1252 / Latin-1 → UTF-8
测试
Windows-1252 / Latin-1 → GBK
测试
Windows-1251 → GBK
Aynı metni bütün yaygın kodlamalarda aynı anda bayt olarak görün — veritabanınızın ya da protokolünüzün tam olarak neyi saklayacağını bilmeniz gerektiğinde işe yarar.
| Kodlama | Bayt | Onaltılık |
|---|---|---|
| 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 |
Go Tools mühendislik ekibi tarafından geliştirildi ve doğrulandı.
UTF-8 → GBK GBK olarak okunan UTF-8 baytları. Altı UTF-8 baytı (E6 B5 8B E8 AF 95) yeniden gruplanarak üç GBK karakterine dönüşür.
UTF-8 → Windows-1252 Aynı UTF-8 baytlarının Windows-1252 olarak okunması. Bu kodlama tek baytlık olduğu için altı baytın her biri kendi karakteri olur.
Kurtarılamaz Hayır. O baytlar çözme anında atıldı. Çevredeki metinden kurtarabildiğinizi kurtarın, gerisi için kaynağa dönün.
3 bayt / 2 bayt Bir Çince karakter UTF-8'de üç, GBK ve Big5'te iki bayttır. Türkçedeki ç, ğ, ı, İ, ö, ş ve ü harfleri UTF-8'de ikişer bayt tutar. Bir sütun karakter yerine bayt cinsinden boyutlandırıldığında bu fark yaygın bir kesme kaynağıdır.
Mojibake, bir metin bir karakter kodlamasıyla yazılıp başka biriyle okunduğunda ortaya çıkan şeydir. Baytlar bozulmamıştır; yanlış olan yalnızca yorumdur. Kurtarmanın mümkün olmasının tek nedeni de bu ayrımdır: baytları hangi kodlamanın yazdığını ve hangisinin yanlış okuduğunu bulabilirseniz, hatayı tersten çalıştırıp özgün metni geri alabilirsiniz.
Sözcük Japoncadır — 文字化け, kabaca "karakter dönüşümü" — ve İngilizcede standart terim hâline gelmesinin nedeni, sorunun Unicode'dan çok önce Japon bilişiminde yaygın olmasıdır. Çince, Japonca ve Korece metinler bundan Latin alfabesiyle yazılmış metinlere göre çok daha fazla zarar görür ve bunun yapısal bir nedeni vardır: bu diller çok baytlı kodlamalara ihtiyaç duyar, çok baytlı kodlamalar da baytların nasıl gruplanacağı konusunda birbiriyle anlaşamaz. Latin alfabesiyle yazılmış bir dize genellikle düz ASCII'dir ve her kodlama ASCII üzerinde hemfikirdir. Türkçe tam ortada kalır: cümlenin çoğu ASCII olduğu için hasar dağınık görünür, ama ç, ğ, ı, İ, ö, ş ve ü harfleri ASCII dışında kaldığından ilk bozulanlar onlardır.
Kurtarma tam olarak tek bir durumda başarısız olur. Bir çözücü, kendi kodlamasında hiçbir karşılığı olmayan baytlarla karşılaştığında onları saklamaz — yerlerine U+FFFD koyar ve atar. O karakterler kalıcı olarak kaybolmuştur. Geri kalan her şey tersine çevrilebilir.
// 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 Bozuk metni yapıştırın, zincirleri araç sizin için sıralasın. UTF-8, GBK, GB18030, Big5, Shift_JIS, EUC-KR, Windows-1252 ve Windows-1251 arasındaki her "hangisiyle yazıldı / hangisiyle okundu" kombinasyonu denenir.
Bir aday, yalnızca aynı zincirden geri geçirildiğinde girdinizi harf harf yeniden ürettiğinde Tam olarak işaretlenir. Bu deterministik bir denetimdir — sıralanmış bir tahmin, hangi sonuçlara güvenebileceğinizi söylemezdi.
Her aday, baytları yazan kodlamayı ve onları yanlış okuyan kodlamayı adıyla verir. Aynı dizeleri haftaya yeniden onarmak yerine kaynağı düzeltmek için ihtiyacınız olan şey budur.
Girdi zaten değiştirme karakteri içeriyorsa araç bunu açıkça söyler ve bütün adayları kısmi olarak işaretler. Çözme anında yok edilen bilgi geri gelmez; aksini varsaymak öğleden sonranızı yer.
Herhangi bir metni desteklenen bütün kodlamalarda yan yana onaltılık bayt olarak görün, ham onaltılığı da ters yönde çözün. Sütun boyu belirlemek, paket yakalamalarını okumak ve BLOB içeriğini kontrol etmek için kullanışlıdır.
Çözme işlemi tarayıcının kendi TextDecoder bileşeniyle yapılır. Yükleme, depolama ve URL yeniden yazma yoktur — bu önemlidir, çünkü bozuk metin çoğu zaman doğrudan üretimden gelir.
娴嬭瘯
测试
İki Çince karakter UTF-8 olarak doğru saklanmıştı (baytlar: E6 B5 8B E8 AF 95), sonra bir program bu altı baytı GBK olarak okudu. GBK baytları ikişer ikişer eşlediği için iki karakter yerine üç karakter üretti. UTF-8 bir dosyayı eski bir Windows uygulaması açtığında ya da veri UTF-8 iken veritabanı bağlantısının karakter seti gbk olarak ayarlandığında elinize geçen şey budur.
测试
测试
Aynı baytlar, başka bir hata. Windows-1252 tek baytlık olduğu için altı UTF-8 baytının her biri kendi başına bir karakter oldu. Latin alfabesi kullanan diller bu sürümle sürekli karşılaşır: café, café olur; naïve, naïve olur. Türkçe metinlerde ilk bozulan harfler ç, ğ, ı, İ, ö, ş ve ü olur — Türkçe sözcüğü Türkçe hâline gelir. Belirtiler bellidir: çiftler hâlinde beliren Ã, Â, â ve araya karışan noktalama işaretleri.
B2 E2 CA D4
测试
Bazen baktığınız şey bozuk bir metin değil, bir paket yakalamasından ya da bir BLOB sütunundan gelen bir onaltılık dökümdür. Onaltılık değeri ikinci bölüme yapıştırıp kodlamayı seçin. B2 E2 CA D4, GBK'de 测试 demektir — aynı iki karakter UTF-8'de altı bayt tutar (E6 B5 8B E8 AF 95) ve Windows-1252'de hiç temsil edilemez.
鏁版嵁搴�
(yalnızca kısmi)
数据库 UTF-8 olarak yazılmış ve GBK olarak okunmuştu, ama son bayt çiftinin GBK'de hiçbir karşılığı yoktu; çözücü onu U+FFFD ile değiştirdi. O bayt gitti. Araç bunu sessizce tahmin etmek yerine açıkça işaretler — dizenin başındaki 数据 hâlâ kurtarılabilir, ama son karakter geri getirilemez ve kaynak veriye dönmeniz gerekir.
Doğrudan yapıştırın — önce kodlamayı belirlemeniz gerekmez. Kısa bir parça yeter; on beş kadar karakter genellikle zinciri sabitlemeye yetiyor.
Tam, zincirin gidiş-dönüşte girdinizi birebir yeniden ürettiği anlamına gelir. Kısmi ise üretmediği; o sonucu bir ipucu olarak değerlendirin.
Her aday, metnin gerçekte hangi kodlamayla yazıldığını ve hangisinin onu yanlış okuduğunu gösterir. Bu size yalnızca metnin ne dediğini değil, yukarı akışta neyi düzelteceğinizi de söyler.
İkinci bölüm herhangi bir metni bütün yaygın kodlamalarda bayt olarak gösterir ve ham onaltılığı ters yönde çözer. Sütun boyu belirlemek ya da protokol çerçevesi kontrol etmek için kullanın.
Bir dize doğru görüntülenirken yine de dönüştürürseniz, kaçınmaya çalıştığınız bozulmayı kendi elinizle üretirsiniz. Önce görüntüyü kontrol edin ve şuna dikkat edin: eksik yazı tipi kutu olarak (□□□), kodlama sorunu ise yanlış karakter olarak görünür.
iconv -f UTF-8 -t GBK correct.txt > broken.txt
# Önce mevcut kodlamayı doğrulayın file -I correct.txt # charset=utf-8 → dönüştürülecek bir şey yok
Bir MySQL sütununun bildirilmiş karakter setini değiştirmek, içindeki baytları yeniden kodlamaz. latin1 veriyi utf8 olarak bildirmek, sunucunun geçerli UTF-8 olmayan baytlar döndürmesine yol açar; sürücü de onları U+FFFD ile değiştirir — yani yok eder.
ALTER TABLE t MODIFY c VARCHAR(255) CHARACTER SET utf8mb4;
-- Baytlar yeniden yorumlanmasın diye önce ikili bir tipten geçin ALTER TABLE t MODIFY c VARBINARY(255); ALTER TABLE t MODIFY c VARCHAR(255) CHARACTER SET utf8mb4;
Kısmi işaretli bir aday gidiş-dönüşü tamamlayamamıştır. İzlemeye değer bir ipucudur, veritabanınıza geri yazılacak bir cevap değil. Hiçbir sonuç Tam gelmiyorsa girdi büyük olasılıkla bilgiyi çoktan kaybetmiştir — kaynak baytlara dönün.
// Rozet ne derse desin ilk adayı al db.update(row.id, candidates[0].text);
// Yalnızca gidiş-dönüşü tamamlayan sonucu geri yaz if (candidates[0].lossless) db.update(row.id, candidates[0].text);
Zaten bytes olan bir şeye encode, zaten str olan bir şeye decode çağırmak Python 3'te sessizce ASCII üzerinden bir tur atmak yerine istisna fırlatır. Baytları sınırda bir kez çözün, sonrasında metni metin olarak tutun.
text = raw.decode('utf-8').encode('gbk').decode('utf-8') # Sınırda bir kez çözün, dosyanın gerçekten kullandığı kodlamayla
with open(path, encoding='gbk') as f:
text = f.read() TextDecoder bileşeni sağlar. Ters yönde kodlama daha zordur, çünkü TextEncoder yalnızca UTF-8 destekler — bu yüzden araç, bayt uzayında gezinip her dizinin ne anlama geldiğini çözücüye sorarak ters bir eşleme kurar. Eşleme böylece her zaman tarayıcının kendi davranışıyla tutarlı olur ve cihazınıza hiçbir arama tablosu indirilmez.Content-Type, dosya açma çağrıları, CSV dışa aktarımları. "Sistem kodlaması" varsayılanına düşen her yer, kod başka bir makineye taşındığında aynı hatanın geri döneceği yerdir.utf8 biçimi karakter başına en fazla üç bayt saklar; emoji ve bazı ender Çince karakterler sessizce kesilir. Gerçek UTF-8 olan utf8mb4'tür. Bu, mojibake'ten farklı bir arızadır ve kurtarma aracı bu konuda yardımcı olamaz, çünkü baytlar gerçekten yok olmuştur.U+FFFD (� olarak görünür) koyar ve onları atar. Bu adım veri kaybına yol açar ve geri alınamaz. Metninizde � varsa, o karakterler hangi aracı kullanırsanız kullanın geri gelmez. Bu sayfa size kendinden emin görünen bir tahmin sunmak yerine durumu doğrudan söyler. iso-8859-1 ve latin1 etiketlerini windows-1252 için birer takma ad sayar. İkisi yalnızca 0x80–0x9F aralığında ayrışır: gerçek ISO-8859-1'de orada kontrol karakterleri, Windows-1252'de ise uzun tire ve kıvrık tırnak gibi yazdırılabilir noktalama işaretleri vardır. Bozuk metinde karşınıza çıkanlar tam da bu yazdırılabilir karakterler olduğu için Windows-1252 ikisinden daha kullanışlıdır ve bu araç onu tek bir seçenek olarak listeler. Türkçenin karşılığı olan ISO-8859-9 (Latin-5) ile Windows-1254 ayrı bir çifttir ve buradaki kodlama listesinde yer almaz; buna karşılık Türkçe harflerin UTF-8 iken Windows-1252 olarak okunmasından doğan bozulma yukarıdaki örnekteki gibi kurtarılır. TextDecoder bileşeniyle yapılır; ağa hiçbir şey gönderilmez, depolamaya yazılmaz, URL'ye eklenmez. Bu, özellikle bu araç için her zamankinden önemlidir: bozuk metin neredeyse her zaman bir üretim kaydından, bir müşteri kaydından ya da bir veritabanı dökümünden gelir — yani sunucu tarafında çalışan bir araca yapıştırmamanız gereken şeylerden. iconv -f GBK -t UTF-8 input.txt > output.txt, PowerShell'de Get-Content -Encoding Default in.txt | Set-Content -Encoding UTF8 out.txt. Komutta hangi kodlamaları yazacağınızı çıkarmak için önce temsili bir satırı buraya yapıştırın — bütün bir dosyada yönü ters çevirmek, tek satırlık sorunların bin satırlık sorunlara dönüşme biçimidir. Kodlama ve Biçimlendirme
Tam ASCII tablosu: 128 karakterin ondalık, onaltılık, sekizlik ve ikilik karşılıkları, artı çift yönlü metin–ASCII dönüştürücü. Kontrol karakterleri kaçış dizileri, şapka gösterimi ve nerede karşınıza çıktıklarıyla birlikte.
Kodlama ve Biçimlendirme
Base64'ü ücretsiz çevrimiçi kodlayın ve çözün. Tam UTF-8 ve emoji desteğiyle gerçek zamanlı dönüştürme. %100 tarayıcıda — kayıt gerekmez.
Kodlama ve Biçimlendirme
Bir Base64 dizesini ya da data URI'yi tarayıcınızda görsele geri çözün. Önizleyin, boyutları ve MIME'ı okuyun, ardından PNG, JPG, GIF, SVG olarak indirin. Yükleme yok.
Kodlama ve Biçimlendirme
CSV'yi tarayıcınızda JSON'a dönüştürün. RFC 4180, tür çıkarımı, başlık satırı, büyük tam sayı güvenli. %100 gizli, yükleme yok.
Kodlama ve Biçimlendirme
Bir .env dosyası yapıştırın, anında JSON alın. Sırlarınız tarayıcınızdan asla çıkmaz — %100 gizli, yükleme yok, ücretsiz dotenv ayrıştırıcı.
Kodlama ve Biçimlendirme
HTML varlıklarını çözün ve HTML'i çevrimiçi unescape edin — ücretsiz, kayıt yok, %100 tarayıcınızda. Adlı, ondalık & hex referansları tekrar karaktere çevirir; asla yüklenmez.