Rab*_*ski 7 python windows unicode terminal
我在Windows 7终端中使用Python解释器.
我试图围绕unicode和编码.
我键入:
>>> s='ë'
>>> s
'\x89'
>>> u=u'ë'
>>> u
u'\xeb'
Run Code Online (Sandbox Code Playgroud)
问题1:为什么字符串中使用的编码s与unicode字符串中使用的编码不同u?
我继续,输入:
>>> us=unicode(s)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0x89 in position 0: ordinal
not in range(128)
>>> us=unicode(s, 'latin-1')
>>> us
u'\x89'
Run Code Online (Sandbox Code Playgroud)
问题2:我尝试使用latin-1编码运气好把字符串变成unicode字符串(实际上,我首先尝试了一堆其他字符串,包括utf-8).如何找出终端用于编码字符串的编码?
问题3:如何才能让终端打印嗯,愚蠢的我.ë的ë,而不是'\x89'或u'xeb'?print(s)做的工作.
我已经看过这个相关的SO问题,但没有任何线索:在Windows上设置Python终端编码
Mar*_*nen 12
Unicode不是编码.您编码为字节字符串并解码为Unicode:
>>> '\x89'.decode('cp437')
u'\xeb'
>>> u'\xeb'.encode('cp437')
'\x89'
>>> u'\xeb'.encode('utf8')
'\xc3\xab'
Run Code Online (Sandbox Code Playgroud)
Windows终端使用DOS的遗留代码页.对于美国Windows,它是:
>>> import sys
>>> sys.stdout.encoding
'cp437'
Run Code Online (Sandbox Code Playgroud)
Windows应用程序使用Windows代码页.Python的IDLE将显示windows编码:
>>> import sys
>>> sys.stdout.encoding
'cp1252'
Run Code Online (Sandbox Code Playgroud)
您的结果可能会有所不
我并不是说“终端”更合适,Windows 7 附带的“DOS 提示符”绝对是垃圾。它在 Windows 95、NT、XP、Vista 和 7 中很糟糕。也许他们用 Powershell 修复了它,我不知道。然而,它表明了当时困扰微软操作系统开发的问题。
设置PYTHONIOENCODING环境变量,然后将输出重定向到文件。
set PYTHONIOENCODING=utf-8
./myscript.py > output.txt
Run Code Online (Sandbox Code Playgroud)
然后使用Notepad++,您可以看到输出的 UTF-8 版本。
win-unicode-console可以解决您的问题。你应该试试
pip install win-unicode-console
Run Code Online (Sandbox Code Playgroud)
如果您对 Python 和命令行输出问题的深入讨论感兴趣,请查看Python 问题 1602。否则,只需使用 win-unicode-console 包。
py -m run script.py
Run Code Online (Sandbox Code Playgroud)
按脚本运行它,或者您可以按照他们的指示win_unicode_console.enable()通过将其添加到usercustomize或来添加到每个调用中sitecustomize。
| 归档时间: |
|
| 查看次数: |
21897 次 |
| 最近记录: |