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

2024-06-24 13:01:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚开始使用discord.py,我想记录消息。不幸的是我遇到了编码问题。如果我将消息写入一个utf-8文件,我将得到特殊字符的unicode而不是字符本身。例如,如果我将áéőúű写入聊天,我的bot会像这样将其记录到文件中:\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)

提前谢谢你的帮助


Tags: 文件importclientjsonmessagedefasusername
1条回答
网友
1楼 · 发布于 2024-06-24 13:01:26

我找到了解决办法,我不得不改变:

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)

现在输出是正确的

相关问题 更多 >