您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python – 你的字符串’与’string’相同.代码(‘XXX’)

5b51 2022/1/14 8:22:46 python 字数 3928 阅读 590 来源 www.jb51.cc/python

虽然标题是一个问题,但简短的答案显然是否定的.我试过 shell.真正的问题是为什么? ps:string是一些非ascii字符,如中文,XXX是当前的字符串编码 >>> u'中文' == '中文'.decode('gbk') False //The first one is u'\xd6\xd0\xce\xc4' while the second one u'\u4e2d\u6587' 上面的例

概述

>>> u'中文' == '中文'.decode('gbk')
False
//The first one is u'\xd6\xd0\xce\xc4' while the second one u'\u4e2d\u6587'

上面的例子如上.我正在使用windows简体中文.认编码是gbk,python shell也是.我得到了两个unicode对象不相等.

更新

a = '中文'.decode('gbk')
>>> a
u'\u4e2d\u6587'
>>> print a
中文

>>> b = u'中文'
>>> print b
ÖÐÎÄ

您的示例文本未使用正确的编解码器;你有GBK编码的文本,解码为latin1

>>> print u'\u4e2d\u6587'
中文
>>> u'\u4e2d\u6587'.encode('gbk')
'\xd6\xd0\xce\xc4'
>>> u'\u4e2d\u6587'.encode('gbk').decode('latin1')
u'\xd6\xd0\xce\xc4'

这些值确实不相等,因为它们不是同一个文本.

同样,使用正确的编解码器很重要;不同的编解码器会导致非常不同的结果:

>>> print u'\u4e2d\u6587'.encode('gbk').decode('latin1')
ÖÐÎÄ

我将示例文本编码为Latin-1,而不是GBK或UTF-8.解码可能已成功,但生成的文本不可读.

另请注意,粘贴非ASCII字符仅起作用,因为Python解释器已正确检测到我的终端编解码器.我可以将浏览器中的文本粘贴到终端中,然后将文本作为UTF-8编码的数据传递给Python.因为Python已经向终端询问了使用了什么编解码器,所以它能够从u’….’Unicode字面值再次解码.当打印encoded.decode(‘utf8’)unicode结果时,Python再次对数据进行自动编码以适合我的终端编码.

要查看Python检测到的编解码器,请打印sys.stdin.encoding:

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

在处理不同的文本来源时,必须做出类似的决定.例如,从源文件读取字符串文字要求您只使用ASCII(并使用转义码代替其他所有内容),或者在文件顶部为Python提供显式编解码符号.

我恳请你阅读:

> The Absolute Minimum Every Software Developer Absolutely,Positively Must Know About Unicode and Character Sets (No Excuses!) by Joel Spolsky
> Python Unicode HOWTO
> Pragmatic Unicode由Ned Batchelder

更全面地了解Unicode的工作原理,以及Python如何处理Unicode.

总结

以上是编程之家为你收集整理的python – 你的字符串’与’string’相同.代码(‘XXX’)全部内容,希望文章能够帮你解决python – 你的字符串’与’string’相同.代码(‘XXX’)所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶