问题描述
我在 Windows 7 终端中使用 Python 解释器.
我正在尝试围绕 unicode 和编码进行思考.
我输入:
>>>s='ë'>>>秒'\x89'>>>u=u'ë'>>>你你'\xeb'问题 1:为什么字符串 s
中使用的编码与 unicode 字符串 u
中使用的编码不同?
我继续,然后输入:
>>>我们=unicode(s)回溯(最近一次调用最后一次):文件<stdin>",第 1 行,在 <module> 中UnicodeDecodeError: 'ascii' 编解码器无法解码位置 0 中的字节 0x89:序数不在范围内(128)>>>us=unicode(s, 'latin-1')>>>我们你'\x89'Question2:我试过使用 latin-1
编码好运将字符串转换为 unicode 字符串(实际上,我先尝试了一堆其他的,包括 utf-8
).如何找出终端使用哪种编码对我的字符串进行编码?
嗯,愚蠢的我.print(s)
完成这项工作.
我已经看过这个相关的 SO 问题,但没有任何线索:设置 PythonWindows 上的终端编码
Unicode 不是一种编码.您编码为字节字符串并解码为 Unicode:
>>>'\x89'.decode('cp437')你'\xeb'>>>u'\xeb'.encode('cp437')'\x89'>>>u'\xeb'.encode('utf8')'\xc3\xab'Windows 终端使用用于 DOS 的旧代码页.对于美国 Windows,它是:
>>>导入系统>>>sys.stdout.encoding'cp437'Windows 应用程序使用 Windows 代码页.Python 的 IDLE 将显示 windows 编码:
>>>导入系统>>>sys.stdout.encoding'cp1252'您的结果可能会有所不同.
I am using the Python interpreter in Windows 7 terminal.
I am trying to wrap my head around unicode and encodings.
I type:
>>> s='ë'
>>> s
'\x89'
>>> u=u'ë'
>>> u
u'\xeb'
Question 1: Why is the encoding used in the string s
different from the one used in the unicode string u
?
I continue, and type:
>>> 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'
Question2: I tried using the latin-1
encoding on good luck to turn the string into an unicode string (actually, I tried a bunch of other ones first, including utf-8
). How can I find out which encoding the terminal has used to encode my string?
Hmm, stupid me. print(s)
does the job.
I already looked at this related SO question, but no clues from there: Set Python terminal encoding on Windows
Unicode is not an encoding. You encode into byte strings and decode into Unicode:
>>> '\x89'.decode('cp437')
u'\xeb'
>>> u'\xeb'.encode('cp437')
'\x89'
>>> u'\xeb'.encode('utf8')
'\xc3\xab'
The windows terminal uses legacy code pages for DOS. For US Windows it is:
>>> import sys
>>> sys.stdout.encoding
'cp437'
Windows applications use windows code pages. Python's IDLE will show the windows encoding:
>>> import sys
>>> sys.stdout.encoding
'cp1252'
Your results may vary.
这篇关于python:Windows终端中的unicode,使用编码?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!