【发布时间】:2019-10-22 11:57:10
【问题描述】:
我正在尝试在 Windows 上读取包含各种字符串的 .json 文本文件,其中一个包含“点运算符”unicode 字符 U+22C5。它在我的远程 Ubuntu 18.04 机器上运行良好。但是,当我在 Windows 机器上读取 JSON 文件时,unicode 字符会被损坏。
JSON 文本文件的内容如下:
"Nm": {
"Value": 1,
"Symbol": "N⋅m"
}
但是,在我使用 python JSON 模块加载文件后,它在我的 python 字典中显示如下(但仅在 Windows 上):
"Nm": {
"Value": 1,
"Symbol": "Nâ‹…m"
}
注意点运算符是如何变成别的东西的。
我将生成的两个字符串转换为字节码进行比较。
Ubuntu 上的字节码:
>>> bytes("N⋅m", "utf-8")
> b'N\xe2\x8b\x85m'
Windows 上的字节码:
>>> bytes("N‹…m", "utf-8")
> b'N\xc3\xa2\xe2\x80\xb9\xe2\x80\xa6m'
在读取 JSON 文件时,Windows 似乎正在更改它的字节码。我在 Windows 上的记事本中打开了 JSON 文件,以查看源文件在 Windows 机器上的解释是否不同,但不是:在记事本中查看时,点运算符正确显示。
有谁知道这是为什么?具体来说,为什么在 linux 机器上读取 unicode 字符时生成的 python 字节码与在 Windows 机器上读取相同字符时不同?
另外,我怎样才能防止这种情况发生?由于这个字符是一种特殊情况,我可以通过使用replace 方法来换出字符来修复它,但这似乎很麻烦。我想首先防止这个问题。
【问题讨论】:
标签: python python-3.x windows non-ascii-characters python-unicode