Различная кодировка из файла и из str (\ n \ n \ r) - Решено - PullRequest
0 голосов
/ 18 июня 2020

Я читаю файл в 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")

1 Ответ

0 голосов
/ 18 июня 2020

В вашем файле нет символов новой строки, в нем есть буквальные символы \ и n, которые называются escape-кодами.

Дайте файл с этим буквальным содержимым:

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 c допускает только символы, закодированные latin1, вместе с escape-кодами в файле, поэтому, если ваш файл содержит символы, отличные от ASCII, которые не входят в набор символов latin1 , проблема все равно будет.

...