Buraya geldiyseniz, programınızda bu mesajın size çarptığı anlamına gelir. Bu yazıda size "UTF-8 bayt dizilerinin" ne olduğunu, neden geçersiz olabileceğini ve Ruby'de bu sorunun nasıl çözüleceğini anlatacağım.
UTF-8, Wikipedia'da açıklandığı gibi , bir dizi kod noktasıdır (basit bir deyişle: karakterleri temsil eden sayılar). UTF-8'deki her karakter 1'den 4 bayta kadar bir dizidir .
UTF-8 dışında, ISO-8859–1 veya Windows-1252 gibi başka kodlamalar da vardır - bu isimleri programlama kariyerinizde daha önce görmüş olabilirsiniz. Bu kodlamalar, özel latin karakterler vb. Dahil olmak üzere büyük bir karakter kümesini kapsar.
Şimdi, UTF-8 çok sayıda karakteri kapsasa da, yukarıda bahsedilen kodlamalarla% 100 uyumlu değildir. Aşağıdaki resme bir göz atın:
Ruby'nin 2.0'dan beri varsayılan kodlaması UTF-8'dir. Bu, Ruby'nin girdiğiniz herhangi bir dizeyi, farklı şekilde kodlandığını açıkça belirtmediğiniz sürece, UTF-8 kodlu dizge olarak ele alacağı anlamına gelir.
ÅBu sorunu sunmak için giriş diyagramındaki karakteri kullanalım . Eğer bir dosya var düşünün
file.txtbir aşağıdaki dizeyi içeren:
"vandflyver \xC5rhus". Bildiğiniz gibi
C5codepoint karşılık için
Åde ISO-8859-1 ve UTF-8 kodlamasında mevcut değildir. Ruby, ancak dosyanın orijinal kodlamasının ISO-8859-1 olduğunu bilmiyor ve varsayılan olarak UTF-8 olarak yorumlayacaktır.
Dolayısıyla, aşağıdaki işlem kötü şöhretli “UTF-8 Geçersiz bayt dizisi” ile sonuçlanacaktır:
Buradaki “geçersiz UTF-8 bayt dizisi” UTF-8'de olmadığı için bizim “Å” (C5) karakterimizdir. Neyse ki bu sorunu çözmenin birkaç yolu var.
Dosyanın orijinal olarak yazıldığı kodlamayı biliyorsanız, yapmanız gereken tek şey giriş dosyasını okurken kodlama adını sağlamaktır. Ruby karakter dönüşümünü sizin için otomatik olarak gerçekleştirecektir:
Son satırda , dönüştürülen karakterin kod noktasını yazdırmak için String.unpack yöntemini kullandım . Gördüğünüz gibi doğru dönüştürülmüş var
C5için
C385🎉
String.encodeYöntem
Çoğu durumda, dosyanın orijinal kodlamasını bildiğiniz için o kadar şanslı olmayacaksınız. Bu durumda String.encode yöntemi işe yarar . Geçersiz UTF-8 karakterlerini atlamak veya bunları seçtiğiniz bir dizeyle değiştirmek için kullanabilirsiniz.
Aşağıdaki örnekleri inceleyin:
Güzel olmayabilir, ancak yine de uygulamayı çökertmekten daha iyidir, değil mi?
Kaynak kodlamasını bilmiyorsanız ve geçersiz karakterleri atlamak istemiyorsanız, charlock_holmes adlı bir karakter kodlama saptama cevheri kullanabilirsiniz . Dizeyi analiz eder ve size en olası kaynak kodlamasını ve tahmin güvenini sağlar (ayrıca bonus olarak bir dil kodu: P).
Eylemde kontrol edin:
Öncelikle, bu gönderinin sahip olduğunuz Ruby sorununu çözmenize yardımcı olacağını umuyorum. Öte yandan, faydalı bir şeyler de öğrendiğinize eminim. Dize kodlamaları bazen gerçekten bozulmuş olabilir, bu nedenle kaputun altında neler olup bittiğini bilmeye gerçekten değer.
İlk olarak https://dev.to/bajena/solving-invalid-byte-sequence-in-utf-8-errors-in-ruby-1f27 adresinde yayınlanmıştır .
Bugün OpenAI (GPT-3) ile oynuyordum ve bir müşteri için oldukça karmaşık bir e-posta çözümleyici oluşturuyordum. AI'nın yanıtıyla çalışırken sorunlarla karşılaşıyordum.
Program yazarken, genellikle bilgisayara komutlar göndeririz ve sonra bu komutların sonuçlarını bir şekilde görürüz. Python'da programdan gelen mesajları görmenin yollarından biri de print işlevini kullanmaktır.
Kasım 2020'nin başlarında SalesForce, açıklanamayacak şekilde JARM adlı yeni bir aktif TLS parmak izi alma aracını duyurdu. JARM'ın temeli, bir hedef sunucu özel olarak hazırlanmış çeşitli farklı TCP "İstemci merhaba" paketleri kullanılarak tarandığında, elde edilen yanıtların birleştirilip, paylaşılan veya benzer bir uygulama veya sunucunun göstergesi olan bir parmak izi sağlamak için karma hale getirilebilmesidir. yığını.
Harika geliştiriciler yapan teknik olmayan şeyler Bir süredir bu makaleyi yazmayı erteliyorum - yazmak için hiç nitelikli hissetmedim. Bugün onu yazma zamanının geldiğini düşündüm.
Teknoloji endüstrisindeki bir pozisyon için mülakat yaparken, herhangi bir teklif değerlendirilmeden önce genellikle en az üç tur mülakattan geçeceksiniz. Mermiler genellikle şuna benzer: Eğer öyle düşünüyorsan, yanılıyorsun.
Pragmatik Programcı ilk olarak 1999'da yayınlandı ve o zamandan beri tüm zamanların en iyi programlama kitabı seçildi. Yazarlar Andy Hunt ve David Thomas, Agile Manifesto'nun orijinal yazarları arasındaydı ve bazı ciddi referanslara sahipler.