h s*_*h s 1 python character-encoding python-3.x
我正在开发一个使用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?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)
Run Code Online (Sandbox Code Playgroud)
它按预期保存字符串。
您的数据使用“UTF-8-SIG”编解码器编码,有时在 Microsoft 环境中使用。
这种 UTF-8 变体使用字节顺序标记 作为编码文本的前缀'\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
Run Code Online (Sandbox Code Playgroud)
要从文件中读取此类数据:
with open('myfile.txt', 'r', encoding='utf-8-sig') as f:
text = f.read()
Run Code Online (Sandbox Code Playgroud)
请注意,即使从 UTF-8-SIG 解码后,您仍可能无法打印数据,因为您的控制台的默认代码页可能无法对数据中的其他非 ascii 字符进行编码。在这种情况下,您需要调整控制台设置以支持 UTF-8。
| 归档时间: |
|
| 查看次数: |
3494 次 |
| 最近记录: |