UnicodeEncodeError запись текста со специальным символом в файл

Я получаю UnicodeEncodeErrorтекст с особым символом в файл:

  File "D:SOFTPython3libencodingscp1252.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode character 'ufffd' in position 956: character maps to <undefined>

Мой код:

expFile = open(expFilePath, 'w')
# data var is what contains a special char
expFile.write("

" + data)

Данные, вероятно, являются некоторыми странными чертами из чего-то вроде Microsoft Word, которые вставляются в HTML-форму приложения, и она сохраняется, теперь я импортирую ее. Я даже не вижу его, показывая, как бриллиант в моем редакторе БД, когда я его запрашиваю. Он просто имеет местозаполнитель в текстовом редакторе. Вход должен быть более строго проверен на соответствие набора символов, но это не так.

Есть ли способ кодирования данных для преобразования любого символа в обработку ввода-вывода?

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

python,encoding,io,

0

Ответов: 1


2 принят

Ваша проблема заключается в том, что cp1252ing в текстовом режиме в вашей системе Windows по умолчанию совпадает с кодовой страницей кода open, - надмножеством ASCII, который кодирует только небольшую часть диапазона Unicode.

Чтобы исправить, поставьте более полную кодировку, которая может поддерживать весь диапазон Unicode; openпринимает аргумент ключевого слова для переопределения кодировки по умолчанию, поэтому это так же просто, как изменение:

expFile = open(expFilePath, 'w')

в

expFile = open(expFilePath, 'w', encoding='utf-8')

В зависимости от ваших потребностей, я бы выбрал либо utf-8или utf-16; первый является более компактным для большей части текста ASCII и обычно встречается повсюду, в то время как последний соответствует типичной кодировке Microsoft для хранения переносимого (не зависящего от языка) текста, поэтому возможно, что некоторые текстовые редакторы, специфичные для Windows, распознают его / обрабатывают легче.

Python, кодирование, IO,
Похожие вопросы