【问题标题】:Json unicode issueJson unicode 问题
【发布时间】:2016-07-07 10:18:04
【问题描述】:

我的 json 文件中有一些非 ASCII 字符。有一个列表,该列表包含SMΛN 之类的字符串。当我读取 json 文件并打印该列表时

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

print (t)

我得到了像'SMΛN\n' 这样的非ASCII 字符串。如何将其解码为 utf-8 或类似我可以正确打印 unicode 字符的东西?我试过这个

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

但是输出还是一样的。

【问题讨论】:

  • locale 说明了什么?将 unicode 编码为文件中的字节是一个问题,而在读取环境中读取另一个解码,然后再次编码输出(这应该取决于带有打印的语言环境)
  • 也可能是您正在阅读的文件不是UTF-8。你确定这是正确的编码吗?
  • @syntonym 我从 .txt 文件中获取数据,然后从 json.dump() 获取数据,然后如上所述从 json 中读取数据。该文件是 utf-8 编码的,我很确定
  • @David 是的,它是 Windows-7
  • FWIW,'SMΛN'.encode('utf8').decode('cp1252') 导致'SMΛN';和'SMΛN'.encode('cp1252').decode('utf8') 导致'SMΛN'。此外,'SMΛN'.encode('utf8') 导致 b'SM\xce\x9bN'

标签: python json windows unicode python-3.4


【解决方案1】:

在 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 字符时,打印才能正常工作。

附: chcp 65001 按照另一个答案 is 中的建议在 Windows 控制台上查看输出(请注意额外的 ] 行。这是 Windows 7):

C:\>chcp 65001
Active code page: 65001

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    • 2010-12-26
    • 2011-11-09
    • 2013-02-12
    • 2010-12-16
    • 2023-03-08
    相关资源
    最近更新 更多