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

我收到此错误:


  UnicodeEncodeError:'charmap'编解码器无法在位置0编码字符'\ ufeff':字符映射到


所以我尝试了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āmaviparīta-pudgala-dharma-nairātmya-pratipādana-arthamtriṃś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)


它按预期保存字符串。

最佳答案

您的数据使用“ 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 - UnicodeEncodeError:'charmap'编解码器无法在位置0编码字符'\ufeff':字符映射到<undefined>,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54664815/

10-10 13:28