web-dev-qa-db-fra.com

Est-ce que l'erreur 'encodage est un mot clé invalide' est inévitable dans python 2.x?

Ansi to UTF-8 utilisant python provoquant une erreur

J'ai essayé la réponse ici pour convertir ansi en utf-8.

import io

with io.open(file_path_ansi, encoding='latin-1', errors='ignore') as source:
    with open(file_path_utf8, mode='w', encoding='utf-8') as target:
        shutil.copyfileobj(source, target)

Mais j'ai "TypeError: 'encoding' est un argument de mot clé invalide pour cette fonction"

J'ai essayé avec

with io.open(file_path_ansi, encoding='cp1252', errors='ignore') as source:

aussi et j'ai la même erreur.

Puis j'ai essayé

import io

with io.open(file_path_ansi, encoding='latin-1', errors='ignore') as source:
    with io.open(file_path_utf8, mode='w', encoding='utf-8') as target:
        shutil.copyfileobj(source, target)

et a toujours la même erreur. J'ai aussi essayé avec cp1252, mais j'ai eu la même erreur.

J'ai appris de plusieurs questions de stackoverflow que

TypeError: 'encoding' is an invalid keyword argument for this function

se produit fréquemment un message d'erreur dans python 2.x

Mais principalement les répondants ont suggéré d'utiliser python 3 d'une manière ou d'une autre.

Est-il vraiment impossible de convertir ansi txt en utf-8 txt dans python 2.x? (J'utilise 2.7)

39
user3123767

Pour Python2.7, utilisez io.open() aux deux emplacements.

import io
import shutil

with io.open('/etc/passwd', encoding='latin-1', errors='ignore') as source:
    with io.open('/tmp/goof', mode='w', encoding='utf-8') as target:
        shutil.copyfileobj(source, target)

Le programme ci-dessus fonctionne sans erreur sur mon PC.

64
Robᵩ

Voici comment convertir ansi en utf-8 en Python 2 (vous utilisez simplement des objets de fichier normaux)):

with open(file_path_ansi, "r") as source:
    with open(file_path_utf8, "w") as target:
        target.write(source.read().decode("latin1").encode("utf8"))
12
Thomas Hobohm

TypeError: 'encoding' est un argument de mot clé invalide pour cette fonction

open('textfile.txt', encoding='utf-16')

Utilisez io, cela fonctionnera dans les versions 2.7 et 3.6 python version

import io
io.open('textfile.txt', encoding='utf-16')

J'ai eu le même problème lorsque j'ai essayé d'écrire des octets dans un fichier. Donc, ce que je veux dire, les octets sont déjà codés. Ainsi, lorsque vous utilisez un mot clé d'encodage, cela génère une erreur.

1
Taras Vaskiv