【问题标题】:Different encoding from file and from str ( \n \n\r ) - Solved文件和 str ( \n \n\r ) 的不同编码 - 已解决
【发布时间】:2020-10-08 20:48:55
【问题描述】:

我在 python 中读取文件,然后用 vk_api 发送一个字符串

 with open('vk_posts.txt', 'r') as f:
     post_list = [x for x in f.readlines()]
     f.close()

 strmsg = post_list_python[0]
 vk.wall.post(message=strmsg)

除了多行消息外,它工作得很好 如果我从“1\n2\r\n3”之类的文件中读取字符串,结果看起来像

"1\n2\r\n3"

但如果我更改代码

vk.wall.post(message="1\n2\r\n3")

结果将变为

1
2
3

我需要相同的结果,但要从文件中读取字符串。

谢谢!

========================================== 我的解决方案:

strmsg = strmsg.replace(r"\n", "\n")

【问题讨论】:

  • 该文件是否包含实际的换行符和回车符,或文字二合字母\n\r
  • 文件包含纯文本,所有\n和\r都只是文本
  • 如果您认为您的问题值得提出并有答案,建议您为自己的问题提供答案,使其显示为已回答,以便其他人可以轻松找到当他们遇到同样的问题时的答案。

标签: python string api encode vk


【解决方案1】:

您的文件没有换行符,它有文字 \n 字符,称为转义码。

给出一个包含这个文字内容的文件:

1\n2\r\n3

您可以打开文件并使用以下命令对其进行解码:

>>> with open('test.txt') as f:  # default open does not translate escape codes.
...  print(f.read())
...
1\n2\r\n3
>>> with open('test.txt',encoding='unicode_escape') as f:
...  print(f.read())
...
1
2
3

但请注意,unicode_escape 编解码器仅允许在文件中使用latin1 编码字符和转义码,因此如果您的文件包含不属于latin1 字符集的非ASCII 字符,您仍然会遇到问题。

【讨论】:

  • 这对我不起作用,可能是因为我使用俄语,我找到了另一个解决方案:message.replace(r"\n", "\n")
  • @Dmitry_scraping 是的,俄语不属于latin1 字符集。您应该使用更多详细信息和文件的真实示例来更新您的问题。你也知道数据的编码吗? UTF-8 还是一些俄罗斯特有的编码?
猜你喜欢
  • 1970-01-01
  • 2012-05-07
  • 2022-01-07
  • 2022-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多