Я пытаюсь прочитать текстовый файл .json в Windows, который содержит различные строки, одна из которых содержит символ Unicode «оператор точки» U + 22C5.Он отлично работает на моей удаленной машине с Ubuntu 18.04.Однако, когда я читаю файл JSON на компьютере с Windows, символ 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'
Кажется, что Windows изменяет байткод файла JSON при его чтении. Я открыл файл JSON в Блокноте в Windows, чтобы увидеть, интерпретируется ли исходный файл по-разному на компьютере с Windows, но это не так: оператор точки отображается правильно при просмотре в Блокноте.
Кто-нибудь знает, почему это так?В частности, почему при чтении символов юникода на машине linux генерируется другой байт-код python, чем при чтении тех же символов на машине Windows?
Кроме того, как я могу предотвратить это?Поскольку этот один символ является особым случаем, я мог бы исправить его, используя метод replace
, чтобы поменять символы, но это кажется хакерским.Я бы хотел просто предотвратить эту проблему.