2016-07-07 97 views
0

我在json文件中有一些非ASCII字符。有一個列表,並且該列表包含像SMΛN這樣的字符串。當我讀到JSON文件和打印,列出Json unicode問題

with open ("strings.json") as f: 
    t = json.load(f) 

print (t) 

我得到的非ASCII字符串如'SMΛN\n'。我怎樣才能解碼它爲utf-8或類似的東西,我可以正確打印Unicode字符?我試過這個

with open ("strings.json",encoding = 'utf-8') as f: 
    t = json.load(f).encode('utf-8').decode('utf-8') 

但是輸出仍然是一樣的。

+1

是什麼'locale'告訴?將unicode編碼爲文件中的字節是一個問題,另一個問題是在讀取環境中讀取其他解碼,然後再次輸出編碼(這應該取決於打印的區域設置) – Dilettant

+1

也可能是您的文件閱讀不是UTF-8。你確定這是正確的編碼嗎? – syntonym

+0

@syntonym我從.txt文件獲取數據,然後使用'json.dump()',然後像上面那樣從json中讀取數據。該文件被編碼utf-8我敢肯定 – GLHF

回答

0

在Python 3中,open默認使用由locale.getpreferredencoding()返回的編碼,在美國本地化的Windows上爲cp1252

開放用UTF-8編碼來代替文件:

#coding:utf8 
import json 
L = ['SMΛN'] 

# Generate an example file in UTF-8. 
with open('out.json','w',encoding='utf8') as f: 
    json.dump(L,f,ensure_ascii=False) 

# open with default encoding 
with open('out.json') as f: 
    L = json.load(f) 

print(L) 

# open with correct encoding 
with open('out.json', encoding='utf8') as f: 
    L = json.load(f) 

print(L) 

輸出:

正在打印
['SMΛN'] 
['SMΛN'] 

注意,如果您的IDE(和字體)支持Unicode字符的打印才能正常工作。

P.S. chcp 65001查看Windows控制檯上的輸出作爲建議的另一種回答是打破(注意額外的]線這是Windows 7操作系統。):

C:\>chcp 65001 
Active code page: 65001 

C:\>test 
['SMΛN'] 
] 
['SMΛN']