Quantcast
Channel: Марко Кажић »Језици
Viewing all articles
Browse latest Browse all 3

Upoznajte Majmunicu iliti Mojibake

$
0
0

Majmunica ili na japanskom Mojibake (文字化け), (文字 (moji) „karakter/znak“ i 化け (bake) „transformacija/promena“), je prikazivanje netačnih, nečitljivih znakova u slučajevima kada softver ne uspe da pročita tekst u skladu za primnjenim i njemu dodeljenim enkodingom znakova, kaže članak na Vikipediji.

Ali ako ste programer (uglavnom vrste veb) i/ili dizajner, ovaj delić teksta vas neće utešiti. Kada vam se majmunica prikaže i vi sami se izmajmunišete tražeći načine da poterate taj enkoding da radi kako mu se kaže. Zato ću vam objasniti šta je ta Majmunica, zašto nastaje i kako da pripitomite enkoding i kod da rade kako valja i trebuje.

Zašto se majmunica pojavljuje?

Osnovni razlozi za ovo čudo su uglavnom nepostavljanje oznaka za enkoding ili prebacivanje datoteka sa sistema na sistem gde se enkodinzi razlikuju, npr. sa Windows-a na Mac ili obratno, ali to se uglavnom dešava sa tipovima datoteka kojima se enkoding ne definiše unutar samog sadržaja/koda. Najpoznatiji takav format je običan tekstualni format – txt. Da vam ne bih sad objašnjavao zašto i kako, zapamtite da ako hoćete da čuvate podatke u običnom tekstualnom formatu – radite to pogrešno.

Pravi razlozi su u principu istorijski, i sežu još na početak razvoja računara i interneta. Kako su pametnjakovići na Zapadu osmislili da se samo i isključivo latinica koristi u početku, kasnije su se dodavali razne kodne strane, za nove jezike, svaka je dobijala svoju varijantu i tako smo došli do pregršt kodnih strana za sve vrste pisama i znakovnih glifa, dok se nisu pojavili Unicode ljudi, da njihovim dobrim, ali prilično zatvorenim radom donesu svetlo u mračni život jezičkih standarda na internetu.

Samo bih napomenuo, da pozdravljam sve Indijce, Ruse, Kineze, Japance i ostale ne-Amerikance koji su radili na kreiranju internet protokola i ostalih relevantih stvari, i da im se zahvalim što se nisu setili da pomenu, da možda slučajno latinica nije jedino pismo na svetu. Svaka čast, geniji.

Kako se majmunica prikazuje?

Recimo da niste definisali kodnu stranu za upotrebu u PHP strani, ili niste postavili kodnu stranu za datoteku u kojoj čuvate kod. Pisali ste na srpskom jeziku, ćiriličnim pismom, i kada otvorite stranu dobijate nešto slično ovome.

R”R° SRµ R±R°R±R° RjSѓS€RєRѕ, R·RІR°R»R° R±Rё SЃRµ R”SѓS€RєRѕ.

Šta se tu desilo? Pošto niste postavili kodnu stranu za sadržaj ili datoteku, sistem je prepoznao tekst kao običan i dekodirao ga po podrazumevanoj kodnoj strani sistema, u ovom slučaju Windows-1251. Za svaki jezik, majmunica će izgledati drugačije, i zavisiće od izvornog teksta i njegovog enkodinga i ispisanog teksta u enkodinga koji je na izlazu upotrebljen. To može izgledati ovako:

p■p╟ яp╣ p╠p╟p╠p╟ p╪я┐я┬p╨p╬, pЇp╡p╟p╩p╟ p╠p╦ я│p╣ p■я┐я┬p╨p╬.
ili ovako:
F∞ µ ±∞±∞ A, J∞ї∞ ± µ FA.

Kako da ne pomajmunišete sadržaj?

Postoji par načina (nezavisnih od uređivača koda, jezika ili sistema) na koje treba da obratite pažnju kada pišete kod i čuvate datoteke.

  • Koristite dobar napredni uređivač teksta. Ja ću vam naravno preporučiti Notepad++ jer možete lako da pretvorite fajl u UTF-8 ili UTF-8 bez BOM-a.
  • Koristite UTF-8 kodnu stranu. Taj standard će vam olakšati mnogo stvari, a možda najbolje je da nećete imati problema sa višejezičkim sadržajem na veb stranama.
  • Koristite prikladne formate za čuvanje podataka. Znači ne TXT. U zavisnosti od potreba, upoznajte se sa XML-om, SQLite bazama, ili već nečim desetim, ali gledajte da bude cross-compatible. Ko ne plati na drumu, plati na ćupriji.
  • Pazite kako čuvajte fajlove. Oznake vam ne služe ničemu ako sačuvate php ili html fajl kao ASCII. Sav sadržaj koji učitavate sa te strane će biti poremećen, a može se desiti da čak i ono što učitavate dinamički ne ili iz eksterne lokacije bude loše prikazano.

 

Za PHP

  • Pažljivo koristite utf8_encode i utf8_decode, ako ne znate šta su, uglavnom vam nisu ni potrebni.
  • Vrlo pažljivo koristite htmlspecialchars, takođe vam uglavnom nisu potrebni ako ne znate specifično čemu služe.
  • Pri povezivanjima sa MySQL bazama, pazite šta radite. Koristite mysql_set_charset(‘utf8′,$conn);  samo ako je baza kreirana u utf8_ varijanti. Ne koristite SET NAMES utf8 jer je od verzije 5.2 potisnut od strane mysql_set_charset funkcije i može sam napraviti majmunicu prebacivanjem sadržaja pri učitavanju iz baze.

 

Za HTML

  • Obratite pažnju na meta oznake i DOCTYPE. Pri korišćenju HTML5 DOCTYPE-a, meta oznaka za definisanje kodne strane se promenila. Sada izgleda ovako: <meta charset=“character_set“ />

Ova tema je sigurno mnogo opsežnija od sadržaja ovog članka ali se nadam da će na ovom malom srpskom vebu biti dobar početak za one koji se susretnu sa majmunicom i požele da je se reše i nauče kako da je izbegnu.

Ako sam nešto  zaboravio, a sigurno je da jesam, komentari su vam otvoreni pa vi navalite.

Pesma koja se slušala toko pisanja:

Yann Tiersen – J’y suis jamais allé*


Viewing all articles
Browse latest Browse all 3

Latest Images

Obnovljeni Chevrolet Trailblazer

Obnovljeni Chevrolet Trailblazer

Obnovljeni Chevrolet Trailblazer

Obnovljeni Chevrolet Trailblazer

Obnovljeni Chevrolet Trailblazer

Obnovljeni Chevrolet Trailblazer

Ford Mustang 60th Anniversary

Ford Mustang 60th Anniversary

Ford Mustang 60th Anniversary

Ford Mustang 60th Anniversary

Ford Mustang 60th Anniversary

Ford Mustang 60th Anniversary

Ford Mustang 60th Anniversary

Ford Mustang 60th Anniversary

Redmi Note 12/Pro/Pro+

Redmi Note 12/Pro/Pro+

Trending Articles


Karagul - Crna ruza - epizoda 83


Dva meseca - epizoda 1


Hitna ljubav - epizoda 8


Poreklo prezimena, selo Gložje (Bosilegrad)


Poreklo stanovništva sela Rajac, grad Čačak


Порекло презимена, село Загуљ (Зубин Поток)


Pesma života - epizoda 57


Porodica Serano - Seranovi - Rade sve epizode !


Odbacena - epizoda 533


Ljubav na medji - epizoda 99


Obnovljeni Chevrolet Trailblazer


Elif - epizoda 182


Momci lepsi od cveca - epizoda 17


Poreklo prezimena, Biovičino Selo (Kistanje)


Slepo crevo,priraslice,infekcija rane


Grejanje na pelet


Kraljica noci - epizoda 5


Ljubav i kazna - epizoda 62 - Kraj Serije ! RADE SVE EPIZODE!


Estrada profitirala: Pevačica dobila hiljade evra baškiša na tajnoj svadbi!...


Hitna ljubav - epizoda 7