Ошибка "кодирование является недопустимым ключевым словом" в python 2.x?

Ansi to UTF-8 с использованием ошибки python

Я попробовал ответить там, чтобы преобразовать ansi в 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)

Но я получил "TypeError:" encoding "- недопустимый аргумент ключевого слова для этой функции"

Я пробовал с помощью

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

тоже, и получилась та же ошибка.

Затем я попробовал

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)

и по-прежнему имеет ту же ошибку. Также я попробовал cp1252, но получил ту же ошибку.

Я узнал из нескольких вопросов о stackoverflow, которые

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

часто возникает сообщение об ошибке в python 2.x

Но главным образом ответчики предлагали использовать python 3 в той или иной форме.

Неужели невозможно преобразовать ansi txt в utf-8 txt в python 2.x? (Я использую 2.7)

Ответы

Ответ 1

Для Python2.7 используйте io.open() в обоих местах.

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)

Вышеупомянутая программа работает без ошибок на моем ПК.

Ответ 2

Вот как вы можете преобразовать ansi в utf-8 в Python 2 (вы просто используете обычные объекты файла):

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

Ответ 3

У меня была такая же проблема, когда я пытался писать байты в файл. Поэтому я хочу сказать, что байты уже закодированы. Поэтому, когда вы используете ключевое слово для кодирования, это приводит к ошибке.