Mam plik json, który ma wiele chińskich i japońskich (i innych języków) znaków. Ja ładuje go do mojego skryptu Pythona 2.7 za pomocą io.open
następująco:Json.dump kończy się niepowodzeniem z "musi być unicode, a nie str" TypeError
with io.open('multiIdName.json', encoding="utf-8") as json_data:
cards = json.load(json_data)
dodać nowy obiekt do JSON, wszystko dobrze. Wtedy staram się go napisać z powrotem do innego pliku:
with io.open("testJson.json",'w',encoding="utf-8") as outfile:
json.dump(cards, outfile, ensure_ascii=False)
To wtedy pojawia się błąd TypeError: must be unicode, not str
próbowałem pisać outfile jako binarna (with io.open("testJson.json",'wb') as outfile:
), ale w końcu z rzeczy to:
{"multiverseid": 262906, "name": "\u00e6\u00b8\u00b8\u00e9\u009a\u00bc\u00e7\u008b\u00ae\u00e9\u00b9\u00ab", "language": "Chinese Simplified"}
Myślałem, że otwarcie i pisanie w tym samym kodowaniu będzie wystarczające, jak również flaga sure_ascii, ale oczywiście nie. Chcę tylko zachować znaki, które istniały w pliku przed uruchomieniem mojego skryptu, bez ich przekształcania w \ u.
nie jestem pewien. Wierzę, że dzieje się tak dlatego, że otwierasz wskaźnik pliku jako zakodowany plik utf-8, ale wyrzucasz obiekt typu "string" ('cards'). –
Ach, powinienem wspomnieć, że karty to obiekt json: '' 'cards = json.load (json_data)' '' – IronWaffleMan
jaka jest nowa właściwość, którą dodasz? czy możliwe jest napisanie [Minimalny sprawdzalny przykład] (http://stackoverflow.com/help/mcve)? –