本文介绍了python:Windows终端中的unicode,使用编码?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在 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,使用编码?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-15 09:36