Bir medya dosyasının yolu ve id3 etiketleri hakkında bilgi alan ve bunları PostgreSQL/Rails kullanarak bir Active Record örneğine kaydeden bir API denetleyicim var. Bunu temizlemek nasıl"string içeriyor null byte" ile kullanıcılardan gönderildi
An ArgumentError occurred in internals#receive:
string contains null byte
activerecord (3.2.21) lib/active_record/connection_adapters/postgresql_adapter.rb:1172:in `send_query_prepared'
: Kullanıcı gibi dizeleri gönderir Bazen ancak
: save
hâlâ mevcut çalışırken
"genre"=>"Hip-Hop\u0000Hip-Hop/Rap"
ve Raylar/Postgres bu konuda tam olarak memnun değil Tamamen boş bayt kaldırmak için Ruby'de dize?
görünüyor. "Temizlemeyi" denemek yerine, göndericiyle bunu doğrulamanızı öneririm ve eğer durum buysa, metni UTF-8'e dönüştürmek için Ruby's Encoding'i kullanın. Willy-nilly karakterin sıyrılması diğer aksaklıklarda meydana gelmesi durumunda yardımcı olmaz. Ayrıca, başka bir kodlama türü için tanımlanmış bir alana kodlanmış bir dizeyi kaydetmeye çalıştığınızda, hem Ruby hem de PostgreSQL bozuk olabilir, bu yüzden kapsamlı olmanız gerekir. –
maalesef kullanıcılar dünyanın dört bir yanında ve bu şeyleri değiştirmelerini söyleyemem. Bu veriler bizim tarafımızdan ve üçüncü şahıs uygulamalarımız tarafından gönderildiği için bile sunucu tarafı düzeltmek zorunda. –
Kodlamasını kontrol etmenin mümkün olup olmadığını görmek için bir dizgiyi kontrol etmek mümkündür. Bazen şanslı olursunuz ve aslında tek bir kodlama olan bir ipucu elde edersiniz, bu da nereye gideceğinize kolayca ulaşmanızı sağlar. Bazen birden çok kodlama içeren bir dize alırsınız ve bunun için kod yazmanız gerekir, ancak sizin için ne anlama geldiğini anlayabilirsiniz. İnsanların size değişmesini istemek, API/hizmetinize kötü bir şekilde ihtiyaç duymadıkça gerçekleşmeyecektir. Bu, içine düşecek çok gevrek bir tavşan deliğidir ve çok zor bir duruma dönüşebilir. –