Python中Discord Webhook发送消息时,message变量内的\n无法解析为换行的问题求助
解决Discord消息中
\n无法解析为换行的问题 我来帮你搞定这个问题!核心原因其实很简单:你从文本文件里提取的\n是字面量的两个字符(反斜杠+n),而不是Python中表示换行的转义字符。当这些内容被发送到Discord时,平台只会把它当成普通文本显示,不会解析成换行。
解决方案
这里有两个实用的方法可以修复这个问题:
方案1:直接替换转义的\n
这是最直接的方式,把文件里读出来的字面量\n替换成真正的换行符:
# 在提取到message之后添加这行代码 message = message.replace(r'\n', '\n')
r'\n'是原始字符串,用来匹配文件里的\和n两个字符'\n'是Python的换行转义字符,替换后Discord就能正确识别为换行
方案2:用ast.literal_eval解析转义序列
如果你的message里还有其他转义字符(比如\t、\"),这个方法更通用,它会把字符串当作Python字面量来解析:
import ast # 在提取到message之后添加这行代码 # 注意:如果message里包含双引号,先转义双引号 message = message.replace('"', '\\"') message = ast.literal_eval(f'"{message}"')
这个方法会自动把所有标准的转义序列转换成对应的字符,不止是\n。
整合到你的代码中
修改后的消息提取代码示例:
datei = open(f'./data/{guildname}/{kategorie}/{channelname}.txt','r') nachrichten=datei.read() for nachricht in nachrichten: if len(nachricht)>=10: try: s, message=nachricht.split("'content': '") message, s=message.split("', 'channel_id'") # 这里添加处理代码,二选一即可 message = message.replace(r'\n', '\n') # 方案1 # 或者方案2: # import ast # message = message.replace('"', '\\"') # message = ast.literal_eval(f'"{message}"') except: message="."
为什么attachments里的\n能正常工作?
因为你是在代码里直接用attachments=f"{attachments}\n{value}"拼接的,这里的\n是Python的转义换行符,不是从文件里读出来的字面量,所以Discord能正确解析。
内容的提问来源于stack exchange,提问作者Deployd




