Я не могу прочитать полный текст этого файла JSON:
{
"messages": [
{
"sender_name": "test",
"timestamp_ms": 1554347140802,
"content": "Ch\u00c3\u00a0o Anh/Ch\u00e1\u00bb\u008b, Anh/Ch\u00e1\u00bb\u008b vui l\u00c3\u00b2ng \u00c4\u0091\u00e1\u00bb\u0083 l\u00e1\u00ba\u00a1i S\u00e1\u00bb\u0090 \u00c4\u0090I\u00e1\u00bb\u0086N THO\u00e1\u00ba\u00a0I + T\u00c3\u008cNH TR\u00e1\u00ba\u00a0NG B\u00e1\u00bb\u0086NH \u00c4\u0091\u00e1\u00bb\u0083 D\u00c6\u00af\u00e1\u00bb\u00a2C S\u00c4\u00a8 CHUY\u00c3\u008aN M\u00c3\u0094N s\u00e1\u00ba\u00afp x\u00e1\u00ba\u00bfp t\u00c6\u00b0 v\u00e1\u00ba\u00a5n v\u00e1\u00bb\u0081 s\u00e1\u00ba\u00a3n ph\u00e1\u00ba\u00a9m, b\u00e1\u00bb\u0087nh t\u00c3\u00acnh c\u00e1\u00bb\u00a5 th\u00e1\u00bb\u0083 v\u00c3\u00a0 li\u00e1\u00bb\u0087u tr\u00c3\u00acnh ph\u00c3\u00b9 h\u00e1\u00bb\u00a3p cho Anh/Ch\u00e1\u00bb\u008b nh\u00c3\u00a9.",
"is_geoblocked_for_viewer": false
},
{
"sender_name": "",
"timestamp_ms": 1554334611125,
"content": "T\u00c3\u00b4i mu\u00e1\u00bb\u0091n \u00c4\u0091\u00e1\u00ba\u00b7t h\u00c3\u00a0ng",
"is_geoblocked_for_viewer": false
},
{
"sender_name": "test",
"timestamp_ms": 1554334610788,
"content": "Ch\u00c3\u00a0o Musickhc! Ch\u00c3\u00bang t\u00c3\u00b4i c\u00c3\u00b3 th\u00e1\u00bb\u0083 gi\u00c3\u00bap g\u00c3\u00ac cho b\u00e1\u00ba\u00a1n?",
"is_geoblocked_for_viewer": false
},
{
"sender_name": "test",
"timestamp_ms": 1554334609955,
"content": "Customer \u00c4\u0091\u00c3\u00a3 tr\u00e1\u00ba\u00a3 l\u00e1\u00bb\u009di tin nh\u00e1\u00ba\u00afn ch\u00c3\u00a0o m\u00e1\u00bb\u00abng t\u00e1\u00bb\u00b1 \u00c4\u0091\u00e1\u00bb\u0099ng c\u00e1\u00bb\u00a7a b\u00e1\u00ba\u00a1n. \u00c4\u0090\u00e1\u00bb\u0083 thay \u00c4\u0091\u00e1\u00bb\u0095i ho\u00e1\u00ba\u00b7c g\u00e1\u00bb\u00a1 l\u00e1\u00bb\u009di ch\u00c3\u00a0o n\u00c3\u00a0y, h\u00c3\u00a3y truy c\u00e1\u00ba\u00adp ph\u00e1\u00ba\u00a7n C\u00c3\u00a0i \u00c4\u0091\u00e1\u00ba\u00b7t tin nh\u00e1\u00ba\u00afn.",
"is_geoblocked_for_viewer": false
}
]
}
Я использую этот код:
with open('message_1.json', 'r', encoding='utf-8') as file:
data = json.loads(file.read())
print('message', data)
file.close()
Результат
{'messages': [{'sender_name': 'test', 'timestamp_ms': 1554347140802, 'content': 'ChÃ\xa0o Anh/Chá»\x8b, Anh/Chá»\x8b vui lòng Ä\x91á»\x83 lại Sá»\x90 Ä\x90Iá»\x86N THOáº\xa0I + TÃ\x8cNH TRáº\xa0NG Bá»\x86NH Ä\x91á»\x83 DƯỢC SĨ CHUYÃ\x8aN MÃ\x94N sắp xếp tư vấn vá»\x81 sản phẩm, bá»\x87nh tình cụ thá»\x83 vÃ\xa0 liá»\x87u trình phù hợp cho Anh/Chá»\x8b nhé.', 'is_geoblocked_for_viewer': False}, {'sender_name': '', 'timestamp_ms': 1554334611125, 'content': 'Tôi muá»\x91n Ä\x91ặt hÃ\xa0ng', 'is_geoblocked_for_viewer': False}, {'sender_name': 'test', 'timestamp_ms': 1554334610788, 'content': 'ChÃ\xa0o Musickhc! Chúng tôi có thá»\x83 giúp gì cho bạn?', 'is_geoblocked_for_viewer': False}, {'sender_name': 'test', 'timestamp_ms': 1554334609955, 'content': 'Customer Ä\x91ã trả lá»\x9di tin nhắn chÃ\xa0o mừng tá»± Ä\x91á»\x99ng cá»§a bạn. Ä\x90á»\x83 thay Ä\x91á»\x95i hoặc gỡ lá»\x9di chÃ\xa0o nÃ\xa0y, hãy truy cáº\xadp phần CÃ\xa0i Ä\x91ặt tin nhắn.', 'is_geoblocked_for_viewer': False}]}
Может кто-нибудь помочь мне, как прочитать этот файл с помощью utf-8? Спасибо
Вы прочитали файл. Я не понимаю. Вы даже представляете результат успешного чтения файла. Файл не содержит никаких специальных символов, не так ли? зачем вообще указывать кодировку?
привет @KamilCuk, например, я хочу ChÃ\xa0o
Chào
Это именно то, что содержит ваш файл. Что бы ни создало этот файл, это ошибка, а не ваш код.
На самом деле, если я помещу содержимое и строки в dencode.com/string/unicode-escape, я получу тот же результат, что вы представили. Ваш файл такой, какой он есть.
Пожалуйста, предоставьте минимально воспроизводимый пример, а также ожидаемый результат и тот результат, который вы получили вместо него. Укажите причины, по которым вы считаете, что выходные данные неверны и должны быть другими. В нынешнем виде неясно, что вы здесь считаете проблемой.
Я только что сделал это:
from operator import itemgetter
with open('message_1.json', 'r', encoding='raw_unicode_escape') as file:
messages = json.loads(file.read().encode('raw_unicode_escape').decode())
print(messages)
file.close()
Но не знаю, есть ли что-то лучше
вам не нужно закрывать файл при открытии его с помощью контекстного менеджера (with
...), в этом вся суть
К сожалению, что бы ни создавало этот файл JSON, оно исказило его, закодировав символы Юникода как UTF-8, а затем закодировав их как отдельные кодовые точки в файле.
Например, à следует писать напрямую как \u00e0, но вместо этого он пишется как \u00c3\u00a0.
Ваш файл JSON поврежден. У вас есть два варианта:
for message in data["messages"]:
message["content"] = message["content"].encode("latin1").decode("utf8")
Вам не нужно парсить файл (и ходить по полям), чтобы исправить кодировку, не так ли? Просто читайте, перекодируйте и json.loads
.
В самих строковых литералах файл содержит escape-символы \u00c3. Чтение их с помощью парсера JSON — наиболее надежный способ устранить такие ошибки.
используйте
json.load()