UnicodeEncodeError:“charmap”编解码器无法对位置0中的字符“\ufeff”进行编码:字符映射到<undefined>

2024-06-01 04:33:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个使用utf-8编码的应用程序。出于调试目的,我需要打印文本。如果我直接将print()与包含unicode字符串的变量ex-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ānām aviparīta-pudgala-dharma-nairātmya-pratipādana-artham triṃśikā-vijñapti-prakaraṇa-ārambhaḥ 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)

它按预期保存字符串


Tags: 字符串utfencodeprintstrxc4preddharma
2条回答

请尝试以下代码:

if pred_str.startswith('\ufeff'):
    pred_str = pred_str.split('\ufeff')[1]

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

UTF-8的这种变体在编码文本前面加上一个前缀byte order mark{},使应用程序比其他编码更容易检测UTF-8编码文本

您可以像这样解码BYTESTRING:

>>> 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

相关问题 更多 >