PHP.EE FOORUM   
Nimi:   Pass:   Mäleta mind! 
   Teemad | php.ee esilehele | registreeri | Märgi kõik teemad loetuks | #php.ee Skype vestlus | RSS
UUS TEEMA  OTSI  Lehekülgi: 1
Kodeering
Postitaja: Ei-hiromant 2013-11-28 17:10:36
Alustan kaugelt. Tüüpiline anglosaksi poolt kirjutatud nn tere-maailm rakendus jätab tähekodeeringu ja selle olulise absoluutselt vaatluse alt välja. Tõsi, on muid asju millele keskenduda. Mina vastupidi keskendun siin just tähetedele.
"Hello World!" ja "Whiches does not walk!" töötavad nii konsooliaknas kui ükskõik millises muus väljundis, seda enimlevinud kodeeringutes mis baseeruvad ASCII standardil. Eestlaste jaoks on lausa oma ISO-8859-13. Kuid isiklik standard eestlast ei aita.
Kui me jõuame PHPst kirjutajateni, siis nemad on valdavalt Linuxi kasutajad, ja võivad (sellest tulenevalt?) samuti kodeeringut eirata, sest nii Linux kui Mac jõudsid rahvusvahelise turu vallutamiseni peale seda kui selle probleemiga oli silmitsi seisnud Microsoft. Linux ja Mac on vaikimisi Unicode, nii väidab Intenet. Microsofti Unicode mõiste (dokumentides, viidetes ja ka praktikas) tähendab UTF-16 ehk UCS. Nii väidab Internet.
Internet väidab veel, et Microsoft töötas erinevate keelte ja nendes leiduvate märkide tarbeks välja oma standardi - ANSI. Väidet pimesi uskudes võiks arvata, et eurooplase arvuti kasutab ANSI koodilehte 1252. Nii usuvad ka paljud arendajad, kuid... Nii minu vana XP kui nüüdse Windows 7ks pööratud 8 konsool kasutab koodilehte OEM 775.
Niisiis, probleemid algavad. PhpDesigner 8 usub, et kuna ma olen Windowsi kasutaja ja asun euroopas, siis parim moodus faile salvestada on teha seda vaikimisi ANSI standardile vastavalt.
Et mitte sulaselgelt valetada:

<?xml encoding="UTF-8" ?>

olles ise just saatnud brauserile ANSI.1252 kodeeringuga faili, muudan muidugi selle eelnimetatud vaike-seade ära. Nüüd kui ma tahan "Whiches does not walk" aseme öelda: "Nõiad ei käi!", ja seda konsooli aknasse, siis teen midagi, mis peaks kõigi eelduste kohaselt vabastama mind kõigis maailma muredest: CHCP 65001. Ekraanile ilmub: "Nõiad ei käi!i!" Lisan Null-terminaatori ("\0"), viimase "i" asemele ilmub tühik. Lisan ühe veel, kaob ka ülearune hüüumärk.
Proovisin seda mitmeti:

echo "Nõiad ei käi!" . chr(0) . chr(0);

Siis proovisin salvestada soovitud teksti faili ja "fail_get_contents". Proovisin Programmers Notepad'i, Notepad'i. Vahet ei ole. Kaks NUL-terminaatorit on vajalikud. Lisaks avastasin, et \0 võib olla konsooli poolt interpreeritud kui tühik (sic!).
Ja lõpuks küsimus: "Kas keegi oskab seda lahti seletada, miks see nii on?" Internet on täis, lausa ummistunud kõiksugu artiklitest, paraku enamus ja hästi CEO-optimeeritud on anglosakside pealiskaudsed arvamused. Võib-olla keegi teist on midagi välja sõelunud ja oskab linkida. Või lihtsalt selgitada what-the-heck-is-going-on?
Mingit erilist probleemi justkui ei ole, aga mingi kahtluseuss vajab testimist: mis juhtub kui kasutaja hiinast ilmub brauseriga, millel on kohaliku standardi kodeering (voeh, ma isegi ei tea, mis neil seal on. Ascii-ga pole sel midagi pistmist ja neid on isegi mitu vist). Kui minu server saadab HTTP-päise "Accept-Charset: UTF-8", kas ma võin eeldada, et tolle hiinlase brauser võtab vaevaks...?
RE: Kodeering
Postitaja: ise php 2013-11-28 17:20:26
Kui hiinlane kasutab brawseri vaikeseadeid, siis peaks olema kodeering seatud automatic peale, mis siis vaatabki lehe kodeeringut. Kui ta aga paneb läsitsi browseril kodeeringu, siis on täpselt selles kodeeringus, mis ta paneb.
Eh kena pikk jutt tavaliselt on sellised teemad sisuga
Aidake täppitähtede asemel mingid krõnksud!
RE: Kodeering
Postitaja: Kuits 2013-11-28 17:37:28
Hiromant, sa oled Martin Vahi?
RE: Kodeering
Postitaja: rtfm 2013-11-28 22:24:10
alusta sellest mida sa saavutada tahad, jäi segaseks
RE: Kodeering
Postitaja: Eui-hiromant 2013-11-28 22:59:59
TSITEERITUD:
Ja lõpuks küsimus: "Kas keegi oskab seda lahti seletada, miks see nii on?" Internet on täis, lausa ummistunud kõiksugu artiklitest, paraku enamus ja hästi CEO-optimeeritud on anglosakside pealiskaudsed arvamused. Võib-olla keegi teist on midagi välja sõelunud ja oskab linkida. Või lihtsalt selgitada what-the-heck-is-going-on?

Ei, ma ei ole Martin. Vaevalt, et see teadmine meid kumbagi eriti edasi viib..
RE: Kodeering
Postitaja: rtfm 2013-11-29 11:39:48
see on sellest et ASCII ja UTF-8 algus kattub ja sa ei saa tuvastada encodingut pelgalt stringist endast. Pead garanteerima et dokument mida sa töötled oleks ka õige charsetiga
RE: Kodeering
Postitaja: tfr 2013-11-29 22:36:25
TSITEERITUD:
Microsofti Unicode mõiste (dokumentides, viidetes ja ka praktikas) tähendab UTF-16 ehk UCS. Nii väidab Internet.


UTF-16 ja UCS-2 (Microsofti Unicode standard) on ikka kaks täiesti eri asja.

Leheküljed: 1

©2002-2013 Martin Rebane & PHP.ee kaasautorid
  0.089371919632