Python Unicode字符串和Python交互式解释器

发布于 2021-01-29 16:14:36

我试图了解python
2.5如何处理unicode字符串。尽管到目前为止,我认为我已经很好地理解了如何在代码中处理它们,但是我还不完全了解幕后的情况,尤其是当您在解释程序的提示符下键入字符串时。

因此python pre
3.0有两种字符串类型,即:(str字节字符串)和unicode,这两种类型均源自basestring。字符串的默认类型是str

str对象没有实际编码的概念,它们只是字节。您是自己编码了unicode字符串,因此知道了它们的编码方式,或者您已经读取了一个字节流,而这些字节的编码您也已经事先知道(理想情况下)。您可以猜测一个字节字符串的编码,该字节字符串的编码对您来说是未知的,但是没有一种可靠的方法可以解决此问题。最好的选择是尽早解码,在代码中的任何地方使用unicode,然后再进行后期编码。

没关系。但是,键入解释器的字符串确实是为您背后编码的吗?如果我对Python中的字符串的理解是正确的,那么python用于做出此决定的方法/设置是什么?

我困惑的根源是在系统的python安装和编辑器的嵌入式python控制台上尝试相同的操作时得到的结果不同。

 # Editor (Sublime Text)
 >>> s = "La caña de España"
 >>> s
 'La ca\xc3\xb1a de Espa\xc3\xb1a'
 >>> s.decode("utf-8")
 u'La ca\xf1a de Espa\xf1a'
 >>> sys.getdefaultencoding()
 'ascii'

 # Windows python interpreter
 >>> s= "La caña de España"
 >>> s
 'La ca\xa4a de Espa\xa4a'
 >>> s.decode("utf-8")
 Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
   File "C:\Python25\lib\encodings\utf_8.py", line 16, in decode
     return codecs.utf_8_decode(input, errors, True)
 UnicodeDecodeError: 'utf8' codec can't decode byte 0xa4 in position 5: unexpected code byte
 >>> sys.getdefaultencoding()
 'ascii'
关注者
0
被浏览
137
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    让我扩展一下Ignacio的回答:在这两种情况下,Python和您之间都有一个额外的层:一种情况是 Sublime Text
    ,另一种情况是cmd.exe。您看到的行为差异不是由于Python引起的,而是由于 Sublime Text
    (看起来是utf-8)和cmd.exe(cp437)使用的不同编码。

    因此,当您输入时ñSublime Text
    发送'\xc3\xb1'到Python,而cmd.exesends发送\xa4。[我只是在这里讨价还价,省略了与问题无关的细节。]

    不过,Python知道这一点。从cmd.exe您可能会得到类似:

    >>> import sys
    >>> sys.stdin.encoding
    'cp437'
    

    而在 Sublime Text中, 您会得到类似

    >>> import sys
    >>> sys.stdin.encoding
    'utf-8'
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看