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

时间:2013-03-14 19:23:05

标签: python encoding utf-8

我有一个文件(sample.txt),其中包含以下文字(在utf-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')

我得到以下文字:

  

n + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +ä+º+ä+ä+ç+è+ä+ | +å+Ñ+ä+è+¿+è+ú+«+ | +â+¿+è+¬+ü+ä+º+ä + | +º+ü+è+ç-ÿ||||î-ÿ|||| +è+ú+«+è+¡+ | +¬+º+ä+à+à+ä+»+ | +¼+ç+»+è+ú+å+º+à+ | + | +¼+ç-ÿ||||Gîú-ÿ||| + +¡+ | +º+à+¬+¡ +++è+àn+++ê+ä+»+«+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +ê+ä+º+ä+ä+ç+è+ä+ + + + + + + + + + + + + + + + + + + + + + + +ä+ | +º+ü+è+ç-ÿ||||î-ÿ|||| +è+ú+«+è+¡+ | +¬+º+ä+à+à+ä+ »+ | +¼+ç+»+è+ú+å+º+à+ | + | +¼+ç-ÿ||||Gîú-ÿ||| + + + + + + + + + +¡+++ E + A

有关正在发生的事情的任何想法?

1 个答案:

答案 0 :(得分:0)

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

您可以使用以下方法检查您的Windows编码:

>>> import sys
>>> sys.getfilesystemencoding()

因此您可以使用以下代码打印x:

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