Encoding UTF-16LE v UTF-8 (TRICKY zadeva!)
2 naročnika
2 naročnika
Lep pozdrav vsem skupaj!
Mogoče se najde kdo, ki bi mi znal pomagat, čeprav je problem res kar kompleksen.
Imam tekstovno datoteko, za katero v binarnem pogledu vidim, da se začne s 4 bajti "FE FF". Glede na tole povezavo ta BOM (byte-order mark) nakazuje, da gre za besedilo v "UTF-16/UCS-2, little endian" encodingu.
Ko to besedilo berem na strežniku (kot UTF-8), je tekst seveda precej popačen. Primer izvornega besedila: "It іs nevеr a сonvenіent timе tо hаvе уour vеhicle quіt оn уоu."
Primer besedila na strežniku: "It Ñ�s nevеr a Ñ�onvenÑ�ent timе tо hаvе Ñ�our vеhicle quÑ�t оn Ñ�оu."
Težava pa je v tem, da na noben način ne morem teksta pretvorit v uporaben UTF-8 zapis. Poskušal sem z iconv(), z mbconvertencoding() ... ampak brez uspeha.
Tekstovno datoteko sem tudi s pomočjo Notepad++ pretvoril v "UTF-8 without BOM", vendar je tekst po prenosu na strežnik še vedno popačen.
Ima kdo kakšno idejo, kako problem rešit? Se je že kdo srečal s čim podobnim?
Hvala vnaprej!
2 odgovora
Sej verjetno si že videl tole: http://shreef.com/2010/08/iconv-misunderstands-utf-16-strings-with-no-bom/ ?
Če ne dela, bi js probal še na Windows serverju, ker Linux ma včasih svoje fore (kak setting zakopan kje globoko v kakem configu).
Hvala za pomoč.
Zanimivo branje, ampak glede na to, da moji problematični teksti vsebujejo BOM (FE FF), ki nakazuje UTF-16/UCS-2 LE, v tem specifičnem primeru žal ni pomagalo.
Po 5 urah iskanja rešitve sem zaenkrat stvar rešil zelo "nerodno", ampak funkcionalno. Grupe bajtov, ki so predstavljali popačene znake, sem mapiral na pravilne znake. Za moj primer se je to izkazalo kot dovolj dobro, ni pa neka univerzalna rešitev in bo verjetno odpovedala pri kakšnem tretjem encodingu.