Ääkköset ja UTF-8 Charset

Viestiketju alueella 'Ohjelmointi' , aloittaja RogueFort, 03.11.2009.

NOSTOJA MUROPAKETIN SISÄLLÖSTÄ
  1. RogueFort

    Rekisteröitynyt:
    12.02.2007
    Viestejä:
    79
    Missä on vika kun en saa näkyviin ääkkösiä UTF-8 charsetilla webbisivuilla. iso-8859-1 näyttää ääkköset hyvin. Olen selannut monia suomalaisia sivuja ja niiden lähdekoodia, ja useimmissa käytetään UTF-8:aa ja ääkköset näkyvät ihan oikein ilman mitään @auml -koodauksia. Minulla näkyy vain kysymysmerkkiä ääkkösten tilalla. Ajelen webbiprojektiani localhostina apachella ja kehysympäristönä toimii PHP:n Zend Framework 1.9.

    Tuossa vielä esimerkki miten ääkköset eivät näy. Ajan siis tuollaisen koodin sisältävä html-filen vaikkapa työpöydältä ja ei toimi.

    Koodi:
    <html> 
    <head>
      <meta http-equiv="content-type" content="text/html; charset=utf-8" />
      <meta name="Language" content="fi" />
      <title>Ei näy ääkköset</title> 
    </head>
    <body>
    byäääääääh
    </body>
    </html>
     
  2. mabasa

    Rekisteröitynyt:
    22.03.2004
    Viestejä:
    3 145
    Editorilla tallentanut ilmoitettuun merkistöön? Headerissa lähetetään oikea merkistö (se on HTML-suosituksen mukaan prioriteetiltaan meta-tagia suurempi)?
     
  3. murmur

    Rekisteröitynyt:
    29.12.2001
    Viestejä:
    6 258
    (copypaste utf8 vastaus). Katso alta olevat linkit yleistä utf8 käyttöä netissä. Tallenna html tiedosto Notepadilla File/SaveAs UTF-8 formaatissa tai fiksummalla editorilla UTF-8 with BOM marker. Wordpad rikkoo utf8 filut sitä ei saa koskaan käyttää.
    XML TEST
    http://murobbs.plaza.fi/ohjelmointi/486387-java-servlet-html-postaus-tietokantaan-o-virhe.html

    PHP osalta joudut tutustumaan utf8 encode/decode funktioihin kun alat dynaamista tietoa liikuttamaan tietokannan-php-clientin välillä.
     
  4. Zvona

    Rekisteröitynyt:
    22.10.2001
    Viestejä:
    1 113
    Edellisestä oikeasta vastauksesta sen verran poiketen, että itsellä on toiminut nimenomaan "UTF8 - No BOM Header" formaattina, ei siis BOM:in kanssa.
     
  5. RogueFort

    Rekisteröitynyt:
    12.02.2007
    Viestejä:
    79
    Tietokannan kentät on koodattu utf-8_unicode_ci:lla ja sieltä ääkköset tulevat
    &auml ja &ouml -koodattuina. Samoin kyrilliset aakkoset on koodattu esim näin:
    Koodi:
    &#1040 &#1083 &#1077
    Kannasta käsin kaikki siis näkyy oikein, mutta jos teksti on kirjoitettu staattisesti sivuille, niin ongelmia tulee heti. Tulisiko staattiset tekstitkin siis koodata &auml -tyyliin. Käväisin joillakin suomalaisilla sivuilla katsomassa lähdekoodia ja kyllä siellä ääkköset olivat ihan ääkkösiä eikä mitään koodauksia.
     
  6. murmur

    Rekisteröitynyt:
    29.12.2001
    Viestejä:
    6 258
    Kuten useamman kerran mainittu, joko ehdit kokeilla .html tiedoston tallennusta UTF-8withBOM tai UTF8withoutBOM formaatissa.
    WinkkuNotepädin File/SaveAs UTF-8 tallettaa bom markerin kanssa.
    Paremmat editorit kuten Notepad++ antaa käyttäjän valita tuleeko bom marker tavut tiedoston alkuun.

    Testaa ensiksi Notepadin kanssa ja kerro miten työpöydältä klikattu sivu avautuu, saatat yllättyä lopputuloksesta.
     
  7. wtf-radio

    Rekisteröitynyt:
    27.10.2009
    Viestejä:
    132
    Saisinko kysellä että millaista sivua siis olet kasaamassa? Tyyliin worpress? Vai ihan jollain frontpagella? Itse huomannut että helpointa on käyttää samaa charsettia kuin mitä serveri tukee suoraan (tai vaihtaa serverin charset) Noista saanut päänsärkyjä joskus kun ei toiminut ääkköset mutta korjautui tuolla. Kyseessä on minulla kylläkin juuri wordpress, irssi, eggdrop systeemit joten en tiedä meneekö paljonkin metsään siinä mitä olet tekemässä :)
     
  8. RogueFort

    Rekisteröitynyt:
    12.02.2007
    Viestejä:
    79
    no siis kyllähän tuo kivasti näkyy oikein kun notepadissa tallentaa UTF-8:na. Mutta eihän siinä nyt ole mitään järkeä, että tallennan kaikki sivuston sisältämät 70 .php ja phtml -fileä UTF-8 -koodauksella. Vai löytyiskö NetBeansista, jota siis käytän, joku asetus, jolla kaikki tallennukset suoritettaisiin UTF-8:na.

    Ja sivustohan on eräänlainen info-sivusto englanniksi, suomeksi ja venäjäksi. Taustalla pyörii Zend Framework 1.9 kehysympäristö ja kantana MySQL. Sivuston ylläpitäjän on lisäksi mahdollista suorittaa pientä sisällönhallintaa tinyMCE:n kautta.
     
  9. miasma

    Rekisteröitynyt:
    07.10.2007
    Viestejä:
    368
    Mitä vit... YMMV todellakin, mutta itse olen UTF-8-muodossa tallentanut kaikki tekstini ainakin viimeiset 6 vuotta. Se kysymysmerkki näkyy juurikin siitä, että headereissa tms. on oikein ilmoitettu utf-8 muodoksi, mutta se html-dokumentti sisältää latin1-merkkejä, joiden merkin koodi on yli 128 desimaalisena. Netbeans tukee UTF-8:a, ihan windowsillakin - paha sanoa mikä sillä on oletuksena sitten windowsissa, ainakin UTF-8 *nix-puolella.
     
  10. RogueFort

    Rekisteröitynyt:
    12.02.2007
    Viestejä:
    79
    Siis tarkoitan, että minun pitäisi jokainen tiedosto avata notepadissa ja tallentaa sitten UTF-8 -muodossa, kun NetBeansilla tallennettuna heittää vaan kysymysmerkkejä. Menisi ikä ja terveys siinä että käy läpi nuo 70 tiedostoa.
     
  11. mabasa

    Rekisteröitynyt:
    22.03.2004
    Viestejä:
    3 145
    Auttaako, jos vaihdat projektin tiedoista UTF-8 ja sitten vaikka "save all" tms.? Jos ei, niin tee vaikka PHP-skripti. utf8_encode()-funktio taitaa hanskata tuon muunnoksen, jos nyt oikein ymmärsin, että ne ovat nyt ISO-8859-1? Tai etsi valmis työkalu.
     
    Viimeksi muokattu: 03.11.2009
  12. RogueFort

    Rekisteröitynyt:
    12.02.2007
    Viestejä:
    79
    Kiitokset auttaneille. Homma ratkesi. NetBeans tallensi tiedostot oletuksena iso-8859-x koodattuina. Määritin projektikohtaisista Set Configuration -asetuksista encodingin UTF-8:ksi. Käynnistin netbeansin uusiks ja avot. Ääkköset oli korvattu palikoilla. Sitten vain kirjoitin niihin kohtaa uudet ääkköset. Toimii ! :)
     
  13. janmi

    Rekisteröitynyt:
    13.01.2007
    Viestejä:
    52
    Itselläni on hieman vastaavanlainen ongelma kuin ketjun aloittajalla. Ostin nettisivut BluDomain nimiseltä firmalta, ja he asensivat Flash-pohjaiset sivut serverilleni. Osoite on www.jannemiettinen.fi.

    Charsetit ja muut ovat itselleni hieman tuntemattomia, mutta ymmärrän niistä ja html:stä jotain, php:sta aika vähän. Muuten sivustoni toimivat hyvin, mutta jouduin asentamaan .htaccess-tiedoston UTF-8 sisällöllä serverilleni, jotta ääkköset näkyivät selaimen yläpalkissa ja googlen hauissa oikein.

    Sen jälkeen pyysin BluDomainia korjaamaan sivujani niin, että plus-merkki (siis +) näkyisi sisäsivuilla. Mutta kun he tämän toteuttivat, niin ääkköset katosivat muokatuilta sivuilta. Katso "info"-sivun viimeinen alasivu, niin näet ongelman...

    Eli mitä voisin tehdä sivuilleni, jotta ääkköset näkyisivät varmasti oikein? Tekstit sivustojen tekstikenttiin tulevat jostain serverillä olevista tiedostoista, joita muokkaan erillisellä selaimella, enkä ole varma mihin tiedostoon tekstit tallentuvat. Mutta onko ongelma edes niissä tiedostoissa?

    Etusivu on index.php ja Flash-pääsivu on index2.php, ja näitä voin tietenkin helposti muokata itsekin. BluDomain vastaa niin hitaasti kyselyihini (eivätkä he tunnu ihan ymmärtävän ongelmaani), joten päätin kysäistä apua muron koodausvelhoilta. :) Ja jos joku onnistuu ratkaisemaan tämän pulmaisen pähkinän, niin olen valmis antaamaan siitä muutaman kymmenen euron palkinnon kiitokseksi.
     
  14. Jurottava

    Rekisteröitynyt:
    04.09.2005
    Viestejä:
    56
    Eikös .htaccess-tiedoston merkistökoodauksen ja sivujen merkistökoodauksen pitäisi olla sama? Sivusi näyttävät olevan iso-8859-1:iä.
    Koodi:
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
     
  15. Kanapulla

    Rekisteröitynyt:
    16.08.2006
    Viestejä:
    1 670
    Eivät ole. Ilmeisesti palvelin määrittää headereissa merkistön UTF-8:ksi ja se on käytössä, kun katsoo sivun ominaisuuksia. Täten siis flashin sisältö on ISO-8859-1-enkoodattua ja siksi rikki.
     
  16. janmi

    Rekisteröitynyt:
    13.01.2007
    Viestejä:
    52
    Mikä on siis helpoin ratkaisu ongelmaan? Ja onko ratkaisuja useampia kuin yksi?
     
  17. janmi

    Rekisteröitynyt:
    13.01.2007
    Viestejä:
    52
    Serverin pitäisi kyllä olla lähtökohtaisesti ISO-8859-1 koodausta käyttävä. No mutta kuitenkin, en ole ennen törmännyt tällaiseen ongelmaan, että ääkköset eivät näkyisi ollenkaan...
     
  18. Kanapulla

    Rekisteröitynyt:
    16.08.2006
    Viestejä:
    1 670
    Ainakin kun blokkaa tuon flash-härpäkkeen ja katsoo HTML-sivun ominaisuuksia, niin merkistöksi on määritetty UTF-8. En tiedä, periytyykö merkistön tulkkaus flashin sisältöön vai määritetäänkö se jossain kyseisen objektin sisällä erikseen.
     
  19. janmi

    Rekisteröitynyt:
    13.01.2007
    Viestejä:
    52
    .htaccess tiedostossa on utf-8 koodaus päällä kaikkiin tiedostoihin, kuten tuossa aikaisemmin mainitsinkin asiasta. Mutta tähän asti on kaikki mennyt ongelmitta, eli flashin sisällä olevat tekstit ovat näkyneet ongelmitta, ääkkösineen kaikkineen. Ja nuo flashin sisällä olevat tekstithän latautuavt jostain toisesta tiedostosta kuin itse .swf-tiedostosta, sillä pystyn muokkaamaan niitä vapaasti.
     
  20. Kanapulla

    Rekisteröitynyt:
    16.08.2006
    Viestejä:
    1 670
    No sitten niiden kyseisten tiedostojen enkoodaus on väärä. Asia on melko simppeli.
     
  21. janmi

    Rekisteröitynyt:
    13.01.2007
    Viestejä:
    52
    Eli mitäs nyt voin asialle sitten tehdä? Osaako kukaan neuvoa?
     
    Viimeksi muokattu: 01.07.2011
  22. murmur

    Rekisteröitynyt:
    29.12.2001
    Viestejä:
    6 258
    Nopeasti katsoin www.jannemiettinen.fi/index.php sivulta mitä se sanoo.
    • http replyn headerissa tulee oikeaoppinen Content-Type: text/html; charset=UTF-8 tietokenttä. Tätä et näe suoraan perusselaimella mutta katsoin debuggerilla.
    • html sivun <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> metatiedon charset on väärä. Tässäkin pitäisi olla charset=UTF-8. Tämän tiedon näet selainen viewsource komennolla.
    • hexaeditorilla tarkistin mitä tavukoodi oikeasti on ääkkösmerkeille ja ne ovat oikeaoppisesti UTF-8 tavukoodeja (ä=C3A3 jne...)


    Korjaa varmuuden vuoksi meta http-equiv metakenttien charset attribuutti oikein, vaikka selain osasikin jättää sen huomioimatta. Selain käytti httpReplyHeaderin arvoa sivun parserointiin.

    Alisivun flash kikkareen osalta en osaa sanoa miten Flash kikkare lataa tekstiresurssit. Ovatko ne tietokannassa josta .php skripti palauttaa flashille, tekstifiluna servon levypinnalla jonka flash lukee vai kolvattu flashin sisään.

    Jos tekstiresurssit ladataan dynaamisesti URLista kerro mitä urlia flash käyttää tekstien lukemiseen. Voin tarkistaa debuggerilla mitä niissä näkyy charset ja tavukoodaukselle. Jompikumpi asia valehtelee ristiin.

    edit: nähtävästi Flash kikkare kutsuu www.jannemiettinen.fi/bluadmin/get_flash_info.php urlia jossa on listattu kaikkien sivujen tekstitiedot.
    • Siellä on url enkoodattuna tietokenttiä, esimerkkinä Tyylini+kuvata+h%C3%A4it%C3%A4+on+dokumentaarinen.+Se+tarkoittaa+sit%C3%A4%2C+ett%C3%A4+kuvaan tekstirimpsu. Siinä on UTF-8 url %C3%A4 enkoodattu ä kirjain. Se on hyvä asia.
    • Http reply headerissa on Content-Type: text/html; charset=UTF-8 tietokenttä lähes oikein. Eihän se mikään html sivu ole vaan text/plain, mutta flash kikkareen lukukoodi ei siitä välitä.
    • Koska php sivu palauttaa kaiken tekstin utf8 url enkoodattuna ei ole merkitystä reply headerin charset attribuutilla. Joten siihen ei tarvitse tässä kohtaa puuttua.
    • Tekstirimpsun + merkki tarkoittaa välilyöntiä ja Flash osaa sen dekodaata oikein.

    Vaikuttaisi skandit rikotaan Flash kikkareen sisällä olevassa parserointikoodissa. Se ei osaa dekoodata merkkijonoja oikein value=URLDecode(value, "UTF-8") komennolla. En osaa flashia joten en tiedä oikeaa komentoa dekodaukseen.

    Villi veikkaus siellä on koodi joka osaa value=URLDecode(value, "ISO-8859-1") charsettikäytön. Sen takia aikaisemmin toimi skandit kun php sivu palautti tekstit ISO-1 url enkoodattuna(?). Tässä tapauksessa ä kirjaimen enkoodaus olisi %E4 merkintä.

    Toivon ettet lähde ISO-1 tielle koska se pitäisi tappaa internetistä, kaikki data suosiolla unicodena jotta toimii kaikki maailman viidakkomerkit kaikille ihmisille. Eletään kuitenkin jo internet-2011 vuotta.
     
    Viimeksi muokattu: 01.07.2011
  23. janmi

    Rekisteröitynyt:
    13.01.2007
    Viestejä:
    52
    Tekstiresurssit ovat kaiken järjen mukaan tietokannassa, joka sijaitsee palvelimellani (tai siis Nettihotelli.fi palvelimella.)

    Tosiaan aikaisemmin flashin sisällä kaikki ääkköset toimivat ihan oikein. Nyt ne ovat yhtäkkiä kadonneet... Siinä mielessä en uskoisi olevan kyse pelkästään Flashin parserointikoodista. En tiedä asiasta paljoakaan, mutta ainakin maalaisjärjellä ajateltuna ongelma olisi muualla. Ja ääkköset tosiaan katosivat siinä vaiheessa, kun BluDomainin tekninen tukihenkilö teki jotain, jotta plus-merkki saatiin käyttöön.
     
  24. murmur

    Rekisteröitynyt:
    29.12.2001
    Viestejä:
    6 258
    En tiedä ehditkö lukea minun editoimani lisäkommentin, jossa tutkin tarkemmin flashin tekstiresurssien lukua.

    Ne luetaan php skriptillä clienttiin(=flash kikkare) jossa clientti dekodaa tekstit selkokielelle. Kyseinen dekoodaus rikkoo tällä hetkellä skandit koska tekstit tulevat url-UTF-8 enkoodattuna. Veikkaan Flashclientin ohjelmakoodi osaa vain url-ISO88591 dekodauksen. Jos resurssirimpsu tulisi sillä enkoodauksella clienttiin skandit ilmestyisivät takaisin. (villi veikkaus mutta olen aika varma asiasta).
     
  25. janmi

    Rekisteröitynyt:
    13.01.2007
    Viestejä:
    52
    Hmm. Mitäköhän tässä nyt sitten pitäisi tehdä asialle...
     

Jaa tämä sivu

Alibi
Anna
Deko
Dome
Erä
Hymy
Kaksplus
Kippari
Kotilääkäri
Kotiliesi
Koululainen
Ruoka.fi
Parnasso
Seura
Suomen Kuvalehti
TM Rakennusmaailma
Tekniikan Maailma
Vauhdin Maailma
Golfpiste
Vene
Nettiauto
Ampparit
Plaza
Muropaketti