Python 打印unicode字符的错误UTF-8表示形式

Python 打印unicode字符的错误UTF-8表示形式,python,encoding,utf-8,Python,Encoding,Utf 8,我有一个文件(sample.txt)包含以下文本(在utf-8): 在2016年8月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月日日日日日日日日日日日日日日日日日日的的的的,,,在在在在图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图

我有一个文件(
sample.txt
)包含以下文本(在
utf-8
):

在2016年8月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月月日日日日日日日日日日日日日日日日日日的的的的,,,在在在在图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图图فيه˘̩⌣˘̩̩ ي أخي حس تالمم لدرجه دي أنا مزعجه ˘̩̩⌣˘̩̩ حرام تحطيمولد خألتي وقف في الشارع يقول الله يلعن إلي بيأخذك بيتفل العافيه ˘̩̩⌣˘̩̩ ي أخي حس تالمم لدرجه دي أنا مزعجه ˘̩̩⌣˘̩حاتتطيم

当我执行以下操作时:

>>> x = open('sample.txt').read().decode('utf-8')

>>> x
u'\ufeff\u0648\u0644\u062f \u062e\u0623\u0644\u062a\u064a \u0648\u0642\u0641 \u0641\u064a \u0627\u0644\u0634\u0627\u0631\u0639 \u064a\u0642\u0648\u0644 \u0627\u
0644\u0644\u0647 \u064a\u0644\u0639\u0646 \u0625\u0644\u064a \u0628\u064a\u0623\u062e\u0630\u0643 \u0628\u064a\u062a\u0641\u0644 \u0627\u0644\u0639\u0627\u0641\
u064a\u0647  \u02d8\u0329\u0329\u2323\u02d8\u0329\u0329 \u064a \u0623\u062e\u064a \u062d\u0633 \u062a\u0627\u0644\u0645\u0645 \u0644\u062f\u0631\u062c\u0647 \u0
62f\u064a \u0623\u0646\u0627 \u0645\u0632\u0639\u062c\u0647  \u02d8\u0329\u0329\u2323\u02d8\u0329\u0329 \u062d\u0631\u0627\u0645 \u062a\u062d\u0637\u064a\u0645\
ufeff\u0648\u0644\u062f \u062e\u0623\u0644\u062a\u064a \u0648\u0642\u0641 \u0641\u064a \u0627\u0644\u0634\u0627\u0631\u0639 \u064a\u0642\u0648\u0644 \u0627\u064
4\u0644\u0647 \u064a\u0644\u0639\u0646 \u0625\u0644\u064a \u0628\u064a\u0623\u062e\u0630\u0643 \u0628\u064a\u062a\u0641\u0644 \u0627\u0644\u0639\u0627\u0641\u06
4a\u0647  \u02d8\u0329\u0329\u2323\u02d8\u0329\u0329 \u064a \u0623\u062e\u064a \u062d\u0633 \u062a\u0627\u0644\u0645\u0645 \u0644\u062f\u0631\u062c\u0647 \u062f
\u064a \u0623\u0646\u0627 \u0645\u0632\u0639\u062c\u0647  \u02d8\u0329\u0329\u2323\u02d8\u0329\u0329 \u062d\u0631\u0627\u0645 \u062a\u062d\u0637\u064a\u0645\n'

>>> open('sample.txt', 'a').write('\n{0}\n'.format(x.encode('utf-8')))
它在文件中写入了完全相同的行。我可以用文本编辑器打开它,两者都是一样的,但是

如果我这样做:

print x.encode('utf-8')
我得到了以下文本:

目前的+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++阿尔法+目前的+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++加拿大人加拿大人加拿大人加拿大人加拿大人加拿大人加拿大人加拿大人加拿大人加拿大人加拿大人加拿大人加拿大人加拿大人+,++++è+è


知道发生了什么吗?

Windows cmd.exe编码不是
'utf-8'
。我的是
'mbcs'

您可以使用以下内容检查windows编码:

>>> import sys
>>> sys.getfilesystemencoding()
因此,您可以使用以下代码打印x:

>>> import sys
>>> print x.encode(sys.getfilesystemencoding())

看起来您的终端不支持UTF-8。尝试重定向到文件并在文本编辑器中打开结果。您的终端或控制台未设置为UTF-8,并且正在以不同方式解释字节。我正在使用MS Windows(
cmd.exe
)。是否可以将其设置为UTF-8?您在哪个平台上?您可以尝试不同的编码,如
“utf-16”
“utf-32”
。@OscarMederos:请参阅windows控制台,utf-8是。。。棘手的