Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python UnicodeEncodeError:&x27;charmap';编解码器可以';t编码字符'\ufeff';在位置0:字符映射到<;未定义>;_Python_Python 3.x_Character Encoding - Fatal编程技术网

Python UnicodeEncodeError:&x27;charmap';编解码器可以';t编码字符'\ufeff';在位置0:字符映射到<;未定义>;

Python UnicodeEncodeError:&x27;charmap';编解码器可以';t编码字符'\ufeff';在位置0:字符映射到<;未定义>;,python,python-3.x,character-encoding,Python,Python 3.x,Character Encoding,我正在开发一个使用utf-8编码的应用程序。出于调试目的,我需要打印文本。如果我直接将print()与包含unicode字符串的变量一起使用,则ex-print(pred_str) 我得到这个错误: UnicodeEncodeError:“charmap”编解码器无法对位置0中的字符“\ufeff”进行编码:字符映射到 所以我尝试了打印(pred_str.encode('utf-8')),我的输出如下所示: >>> bs = b'\xef\xbb\xbfpudgala-dhar

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

我得到这个错误:

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

所以我尝试了
打印(pred_str.encode('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 
b'\xef\xbb\xbfpudgala dharma nair\xc4\X81TMayo\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\xb1opti prakara\xe1\xb9\x87a-\xc4\x81rambha\xe1\xb8\xa5'
布德加拉-达摩-奈尔\xc4\x81tmya pratip\xc4\x81danam punar kle\xc5\x9ba-j\xc3\xb1eya-\xc4\x81vara\xe1\xb9\x87a prah\xc4\x81\xe1\xb9\x87a artham'

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

>>> 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 
pudgala-dharma-nairātmyayoḥ vipratipannānām
阿维帕塔·普加拉·达尔玛·奈尔ātmya pratipādana artham
三ṃśikā-vijñapti prakaraṇa-ārambhaḥ
普德加拉·达尔玛·奈尔ā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)
它按预期保存字符串。

请尝试以下代码:

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

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

UTF-8的这种变体在编码文本前面加上一个
'\xef\xbb\xbf'
,使应用程序更容易检测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字符进行编码。在这种情况下,您需要支持UTF-8