打印错误的UTF-8表示的Unicode字符
我有一个文件(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îú-ÿ¦¬¦¬ +è +ú+«+è +¡+¦ +¬+º+ä+à+à +ä+»+¦+¼+ç +»+è +ú+å+º +à+¦+¦+¼+ç -ÿ¦¬¦¬Gîú-ÿ¦¬¦¬ +¡+¦+º+à +¬+¡+++è+àn+++ê+ä+» +«+ú+ä+¬+è +ê+é+ü +ü+è +º+ä+¦+º+¦+¦ +è+é+ê+ä +º+ä+ä+ç +è+ä+¦+å +Ñ+ä+è +¿+è+ú+«+¦+â +¿+è+¬+ü+ä +º+ä+¦+º+ü+è+ç -ÿ¦¬¦¬Gîú-ÿ¦¬¦¬ +è +ú+«+è +¡+¦ +¬+º+ä+à+à +ä+»+¦+¼+ç +»+è +ú+å+º +à+¦+¦+¼+ç -ÿ¦¬¦¬Gîú-ÿ¦¬¦¬ +¡+¦+º+à +¬+¡+++è+à
有什么想法知道发生了什么吗?
1 个回答
Windows的命令提示符(cmd.exe)的编码不是'utf-8'
。我的编码是'mbcs'
。
你可以用下面这个方法来检查你的Windows编码:
>>> import sys
>>> sys.getfilesystemencoding()
所以你可以用下面的代码来打印x:
>>> import sys
>>> print x.encode(sys.getfilesystemencoding())