Kirjautuminen

Haku

Tehtävät

Kilpailu

Algoritmikisa
Putka Open 2020 -kisan
4. kierros: 6.–8.11.

Keskustelu: Nettisivujen teko: Python 3.6 ja äö -> \ufffd

Sivu 1 / 1

Multibyte [01.12.2017 13:07:12]

#

Moi

Mulla JSON tiedosto, jossa on yhden avaimen arvot ovat kaikki url enkoodattu.

Yritän nyt Pythonilla jumpata tuon tiedoston läpi ja korvata nuo entiteetit selkokielisillä merkeillä.

Arvot sisältävät ääkkösiä ja homma epäonnistuu siten, että ääkkösten tilalle JSONiin ilmestyy \ufffd. Sen verran olen kartalla, että se tulee tuo virheen mukana errors=replace parametrin mukaisesti, mutta mikä sen varsinaisen virheen aiheuttaa?

En tunnu löytävän tietä ulos tästä ongelmasta. Käytän Windowsia, jossa olen testannut sekä cmd:ia että git bash:iä.
Epäilen, että ongelma ei ole noissa vaan itse koodissa ja/tai json tiedostossa.

Olen koittanut avata ja tallentaa lähde JSONin utf-8 koodauksella.

import sys
import os
import json
import urllib
import html
import codecs
from pprint import pprint
from urllib.parse import quote

if __name__ == '__main__':
    with open('wasd.json' ,'r') as jsonfile:
        links = json.load(jsonfile)
        for x in links['a'][0]:
            for y in links['a'][0][x]:
                y['title'] = urllib.parse.unquote_plus(y['title'], encoding='utf-8', errors='replace')
        with open('asd.json' ,'w') as kk:
            json.dump(links, kk, indent=4)

Grez [01.12.2017 14:25:47]

#

Multibyte kirjoitti:

Arvot sisältävät ääkkösiä ja homma epäonnistuu siten, että ääkkösten tilalle JSONiin ilmestyy \ufffd. Sen verran olen kartalla, että se tulee tuo virheen mukana errors=replace parametrin mukaisesti, mutta mikä sen varsinaisen virheen aiheuttaa?

Hyvin sopii nicki aiheeseen/ongelmaan :D

No mut joo, siis virheen aiheuttaa se, että tekstissä on ä tai ö ja perässä joku toinen merkki tai merkkejä niin, että ne eivät yhdessä ole validi UTF8 -merkkiyhdistelmä

Eli kannattaa ehkä kertoa url parserille että encoding on joku muu kuin utf-8.

(Tässä nyt on jonkin verran sivistynyttä arvausta mukana, kun et ollut laittanut mitään esimerkkiä url-koodatusta datasta, joka virheen aiheuttaa)

Multibyte [01.12.2017 16:53:42]

#

Grez kirjoitti:

(01.12.2017 14:25:47): ”– –” Hyvin sopii nicki aiheeseen/ongelmaan :D ...

:D totta tuokin ja itseasiassa nämä ongelmat tuppaavat tulemaan toistuvasti vastaan.
Vaikuttaa jo melko kohtalon sanelemalta.

Mutta miten lähden tuota selvittämään, että osaan tarjota oikeaa merkistöä?
Kaikki merkit viittaa siihen, että se olisi oikea, mutta kaikkihan on mahdollista.

Data on rapattu sivulta JavaScriptillä ja sivu on ollut windows-1252.
Ei kuitenkan auta noiden kanssa puljaaminen...

Metabolix [01.12.2017 17:02:37]

#

Tutki nyt ensin, onko ongelmana JSON-tiedoston enkoodaus, joka pitää korjata open-kutsussa, vai title-muuttujan enkoodaus, joka pitää korjata unquote_plus-kutsussa. Tekstieditori yleensä osaa kertoa tiedoston enkoodauksen. Title-muuttujan enkoodaus taas selviää katsomalla, onko siinä ääkkösenä yksi %-juttu kuten %E4 (ISO-8859-1 tai Windows-1252) vai kaksi kuten %C3%A4 (UTF-8). Jos et saa näitä selville, voit tietenkin kokeilla molempiin kohtiin kaikkia realistisia enkoodauksia (lähinnä UTF-8 ja ISO-8859-1 ja Windows-1252).

Multibyte [01.12.2017 21:17:45]

#

Metabolix kirjoitti:

(01.12.2017 17:02:37): Tutki nyt ensin, onko ongelmana JSON-tiedoston...

%E4 eli epäilty windows-1252. Täytyy vielä testailla.

EDIT: No kerpeles, sehän oli kuitenkin tuo ensure_ascii arvo eli falsella toimii.

Metabolix [02.12.2017 11:38:13]

#

Multibyte kirjoitti:

No kerpeles, sehän oli kuitenkin tuo ensure_ascii arvo eli falsella toimii.

Hieman koomista, että ensure_ascii tuottaa sitten kuitenkin ASCII-merkistön ulkopuolelta tuon \ufffd-merkin (�)...

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta