Как я могу декодировать строку, прочитанную из файла? - PullRequest
0 голосов
/ 09 января 2019

Я читаю файл в строку в Python, и он отображается как закодированный (не уверен в кодировке).

query = ""
with open(file_path) as f:
 for line in f.readlines():
   print(line)
   query += line
query

Все строки распечатываются на английском языке, как и ожидалось

select * from table

но запрос в конце отображается как

ÿþd\x00r\x00o\x00p\x00 \x00t\x00a\x00b\x00l\x00e\x00 

Что происходит?

Ответы [ 3 ]

0 голосов
/ 09 января 2019

Согласен с Карлосом, кодировка, похоже, UTF-16LE. Кажется, здесь присутствует спецификация, поэтому encoding="utf-16" сможет автоматически обнаруживать, если она имеет младший или старший порядковый номер.

Идиоматический Python будет:

with open(file_path, encoding="...") as f:
    for line in f:
        # do something with this line

В вашем случае вы добавляете каждую строку к запросу, поэтому весь код может быть уменьшен до:

query = open(file_path, encoding="...").read()
0 голосов
/ 09 января 2019
with open(filePath) as f:
    fileContents =  f.read()
    if isinstance(fileContents, str):
        fileContents = fileContents.decode('ascii', 'ignore').encode('ascii') #note: this removes the character and encodes back to string.
    elif isinstance(fileContents, unicode):
        fileContents = fileContents.encode('ascii', 'ignore')
0 голосов
/ 09 января 2019

Похоже на данные UTF-16. Можете ли вы попробовать расшифровать его с помощью utf-16?

with open(file_path) as f:
    query=f.decode('utf-16')
print(query)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...