如何将message.content写入文件? (编码问题)

时间:2018-12-26 20:48:00

标签: python json encoding discord.py

我刚刚开始使用discord.py,我想记录消息。不幸的是,我遇到了编码问题。如果将消息写到utf-8文件中,则会得到特殊字符的unicode,而不是字符本身。例如。如果我在聊天中写入áéőúű,则我的机器人会将其记录到文件中,如下所示:\u00e1\u00e9\u0151\u00fa\u0171。无论有人键入什么特殊字符,我都该怎么做?我将准确的字符登录到文件中(所以预期的结果是看到文件中的相同字符,就像我将其从不和谐中复制粘贴到文件中一样) )。

由于它只是一个非常基本的“ hello world”类型的代码,因此,我将在此处复制完整的代码:

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 :(得分:1)

我找到了解决方案,我不得不更改:

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)

现在输出正确了。

相关问题