2016-12-13 22 views
5

Chcę odczytać plik JSON w Pythonie, który zawiera tekst, ale tekst arabski arabski to wyglądać, że:Reading arabski z pliku JSON

ط§ظ„ط³ظژط¹ظژط§ط¯ظژط©ظگ ظ„ظژظٹظگط³ظژطھظŒ ط§ظ„ط­ظژطµظŒظˆظژظ„ظژ ط¹ظژظ„ظ‰ظژ 
ظ…ط§ظژ ظ„ط§ظ†ظژظ…ظ„ظگظƒظژ ط¨ظژظ„ ظ‡ظگظٹظژ ط£ظ†ظژ ظ†ظژظپظ‡ظŒظ…ظژ 
ظˆظژظ†ظگط¯ط±ظژظƒظژ ظ‚ظژظٹظگظ…ط©ظڈ ظ…ظژط§ظ†ظژظ…ظ„ظƒ 

Jak można odczytać odpowiednie litery arabskie?

import sys 
non_bmp_map = dict.fromkeys(range(0x10000, sys.maxunicode + 1), 0xfffd) 
print(x.translate(non_bmp_map)) 

x to parametr zawierający wartości arabskie z pliku JSON. Spodziewałem się uzyskać następujące zdanie: الظ طأظژط ظ ... ططظژ ظ "ططظ † ظژظ ... ظ" ظگظ ƒ ظژ ط¨ظژظ "ظ ‡ ظگظٹظژ ط ظ † ظژظپظ ظژظپظ ظژظپظ ظ ظ Œ ظ ... ظژ ظظژظ † ظگط¯ط ظژظ ظژظ ƒ ظژ ظ, ظژظٹظگظ ... ط ظڈ ظ ... ظژط§ظ † ظژظ ... ظ „ظ ƒ

+1

można pokazać (w pytaniu) dane ORYGINAŁ, oczekiwany wynik (i pełny komunikat o błędzie, jeśli masz jeden) – furas

+0

spodziewałem się dostać to zdanie: السعادة ليست الحصول على ما لانملك بل هي أن نفهم وندرك قيمة مانملك ale dostaję ط§ظ "ط³ظژط¹ظژط§ط¯ظژط © ظگ ظ" ظژظٹظگط³ظژطھظ Œ ططظ "طظژطμظ Œ ظظژظ" ظژ ط¹ظژظ "ظ ‰ ظژ ظ ... ططظژ ظ" ططظ † ظژظ ... ظ "ظگظ ƒ ظژ ط ¨ظژظ "ظ ‡ ظگظٹظژ ط ظ † † ظژظپظ ظ Œ ظ ... ظژ ظظژظ † ظگط¯ط ظژظ ظژظ ƒ ظژ ظ ظژظٹظگظ ط ظڈ ظڈ ظ ظژط ظژط ظژط ظژظ ظژظ ... „ظ ƒ –

+1

btw: jak powiedziałem w poprzednim Commend - należy pokazać ją w pytaniu nie Commend. To była ważna informacja - nie wszystkie przeczytane komentarze. – furas

Odpowiedz

3

nie wspomniano, jeśli używasz Python 3 lub 2. W Pythonie 3, ciągi są Unicode domyślnie.

Jeśli używasz Python 2, użyj codec:

import codecs 
f = codecs.open('unicode.rst', encoding='utf-8') 
for line in f: 
    print repr(line) 

Ref: Unicode How-to


Jest jednak możliwe, że dane wejściowe nie jest poprawnie zakodowany. W takim przypadku możesz spróbować użyć opcji ftfy package.

ftfy implementuje kilka heurystyk, aby naprawić złamane/niekonsekwentne kodowanie Unicode. Od docs:

>>> from ftfy import fix_encoding 
>>> print(fix_encoding("(ง'⌣')ง")) 
(ง'⌣')ง 
+2

Hahahahah. Jest pyton zwany "ftfy"? xD W jakich ekscytujących czasach żyjemy! –

+0

to nie działa. notatnik pokazuje, że kodowanie to ANSI –

+0

> notatnik pokazuje, że kodowanie to ANSI –