J'ai lu un fichier dans une chaîne en Python, et il apparaît comme encodé (pas sûr de l'encodage).
ÿþd\x00r\x00o\x00p\x00 \x00t\x00a\x00b\x00l\x00e\x00
Les lignes sont toutes imprimées en anglais comme prévu
select * from table
mais la requête à la fin apparaît comme
query = "" with open(file_path) as f: for line in f.readlines(): print(line) query += line query
Que se passe-t-il?
3 Réponses :
Cela ressemble à des données UTF-16. Pouvez-vous essayer de le décoder avec utf-16?
with open(file_path) as f: query=f.decode('utf-16') print(query)
D'accord avec Carlos, l'encodage semble être UTF-16LE. Il semble y avoir une nomenclature présente, donc encoding = "utf-16"
serait capable de détecter automatiquement si elle est petit ou grand-boutiste.
Python idiomatique serait:
query = open(file_path, encoding="...").read()
Dans votre cas, vous ajoutez chaque ligne à la requête, ainsi le code entier peut être réduit à:
with open(file_path, encoding="...") as f: for line in f: # do something with this line
Réponse acceptée car c'est la seule qui fonctionne pour moi dans Python 3.6. Appréciez également de le réduire à une ligne de code
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')
Des entités HTML au texte Unicode, j'obtiens
ÿþdrop table
Ack le contenu de la requête est censé être confidentiel.