Как написать сообщение .content в файл?(Проблема с кодировкой) - PullRequest
0 голосов
/ 26 декабря 2018

Я только начал использовать discord.py и хотел бы регистрировать сообщения.К сожалению, я сталкиваюсь с проблемами кодирования.Если я пишу сообщения в файл utf-8, я получаю юникод специальных символов вместо самого символа.Например, если я напишу áéőúű в чате, мой бот запишет это в файл следующим образом: \u00e1\u00e9\u0151\u00fa\u0171.Как я могу сделать так, чтобы неважно, какой специальный символ кто-то печатает, я записываю в файл точный символ (поэтому ожидаемый результат будет состоять в том, чтобы увидеть те же символы в файле, как если бы я копировал их из разногласия в файл).).

Так как это просто базовый код типа "привет, мир", я скопирую здесь полный код:

import json
import discord
import os
from time import gmtime, strftime

client = discord.Client()


@client.event
async def on_ready():
    print(f'We have logged in as {client.user}')


@client.event
async def on_message(message):
    userName = message.author.name + "#" + message.author.discriminator
    writeMessageToFile(filePath='D:\Projects\Discord\messages.json', userName=userName, message=message.content)


def writeMessageToFile(filePath:str, userName:str, message:str):
    messagesData = {}
    timeStamp = strftime("%Y-%m-%d %H:%M:%S", gmtime())
    if os.path.isfile(filePath):
        with open(filePath, "r", encoding='utf_8') as jsonFile:
            messagesData = json.load(jsonFile)

    userMessages = messagesData.get(userName, None)
    if userMessages is None:
        messagesData[userName] = [{'TimeStamp': timeStamp, 'Message': message}]
    else:
        messagesData[userName].append({'TimeStamp': timeStamp, 'Message': message})

    with open(filePath, "w", encoding='utf_8') as jsonFile:
        json.dump(messagesData, jsonFile, indent=2)


if __name__ == '__main__':
    token = 'XXXXXXXXXXXXXXXXXXXXXXXXX'
    client.run(token)

Заранее спасибо за помощь.

1 Ответ

0 голосов
/ 27 декабря 2018

Я нашел решение, мне пришлось изменить:

with open(filePath, "w", encoding='utf_8') as jsonFile:
    json.dump(messagesData, jsonFile, indent=2)

на:

with open(filePath, "w", encoding='utf_8') as jsonFile:
    json.dump(messagesData, jsonFile, indent=2, ensure_ascii=False)

И теперь вывод правильный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...