python - Unicode编码错误: 'charmap' codec can't encode character '\ufeff' in position 0: character maps to <undefined>

标签 python python-3.x character-encoding

我正在开发一个使用utf-8编码的应用程序。出于调试目的,我需要打印文本。如果我直接将 print() 与包含我的 unicode 字符串的变量一起使用,例如 print(pred_str)

我收到此错误:

UnicodeEncodeError: 'charmap' codec can't encode character '\ufeff' in position 0: character maps to

所以我尝试了 print(pred_str.encode('utf-8')) ,我的输出如下所示:

b'\xef\xbb\xbfpudgala-dharma-nair\xc4\x81tmyayo\xe1\xb8\xa5 apratipanna-vipratipann\xc4\x81n\xc4\x81m' b'avipar\xc4\xabta-pudgala-dharma-nair\xc4\x81tmya-pratip\xc4\x81dana-artham' b'tri\xe1\xb9\x83\xc5\x9bik\xc4\x81-vij\xc3\xb1apti-prakara\xe1\xb9\x87a-\xc4\x81rambha\xe1\xb8\xa5' b'pudgala-dharma-nair\xc4\x81tmya-pratip\xc4\x81danam punar kle\xc5\x9ba-j\xc3\xb1eya-\xc4\x81vara\xe1\xb9\x87a-prah\xc4\x81\xe1\xb9\x87a-artham'

但是,我希望我的输出如下所示:

pudgala-dharma-nairātmyayoḥ apratipanna-vipratipannām 梵行无明菩提伽罗法 Triṃśika-vijñapti-prakaraṇa-arambhaḥ pudgala-dharma-nairātmya-pratipādanam punar kleśa-jñeya-āvaraṇa-prahāṇa-artham

如果我使用以下方式将字符串保存在文件中:

with codecs.open('out.txt', 'w', 'UTF-8') as f:
    f.write(pred_str)

它按预期保存字符串。

最佳答案

您的数据使用“UTF-8-SIG”编解码器进行编码,该编解码器有时在 Microsoft 环境中使用。

UTF-8 的这种变体在编码文本前加上 byte order mark 前缀。 '\xef\xbb\xbf',使应用程序更容易检测 UTF-8 编码文本与其他编码。

您可以像这样解码此类字节串:

>>> bs = b'\xef\xbb\xbfpudgala-dharma-nair\xc4\x81tmyayo\xe1\xb8\xa5 apratipanna-vipratipann\xc4\x81n\xc4\x81m'
>>> text = bs.decode('utf-8-sig')
>>> print(text)                                                                                                         
pudgala-dharma-nairātmyayoḥ apratipanna-vipratipannānām 

要从文件中读取此类数据:

with open('myfile.txt', 'r', encoding='utf-8-sig') as f:
    text = f.read()

请注意,即使从 UTF-8-SIG 解码后,您可能仍然无法打印数据,因为您的控制台的默认代码页可能无法对数据中的其他非 ascii 字符进行编码。在这种情况下,您将需要 adjust your console settings支持UTF-8。

关于python - Unicode编码错误: 'charmap' codec can't encode character '\ufeff' in position 0: character maps to <undefined>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54664815/

相关文章:

python - 如何在数据框中添加由字母数字组成的递增值的列和另一列包含随机数的列

python - Gnuplot 中的连续、大小固定、透明的图形

python - Python 字典中变量作为值

php - 具有不同的服务器端和数据库字符集 - CodeIgniter

java - 当我使用 Java 8 创建文件时,使用 Shift-JIS 字符集,一些字符被替换为 char '?'

python - 用于预测的循环神经网络无法学习

python - scrapy选择器中的相对XPath

python - Altair:如何向包含行的条形图添加标签

python - 将 Python 中的 '*' 字符读入新字符串时出现问题

python - 忽略 CSV 中的 UTF-8 解码错误