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)
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)
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...
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).
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.
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 (�)...
Aihe on jo aika vanha, joten et voi enää vastata siihen.