Python “中使用的不同编码”;打印s";vs";打印“;?
当我在IPython笔记本中执行以下操作时Python “中使用的不同编码”;打印s";vs";打印“;?,python,unicode,Python,Unicode,当我在IPython笔记本中执行以下操作时 s='½' s print s print [s] 我明白了 这是怎么回事 如何打印Unicode字符串列表?(即我想看[½]) 编辑 所以从评论来看,看起来区别在于“print s”使用s.“s”,“print[s]”使用它的s.“print[s]”可以使用repr\uu函数创建一个包含列表可打印表示形式的字符串,然后使用字符串转义编码对字符串进行解码,该编码将返回字符串的字节字符串。然后,通过打印字节字符串,终端将按照默认编码(通常为UTF8)自
s='½'
s
print s
print [s]
我明白了
所以从评论来看,看起来区别在于“print s”使用
s.“s”,“print[s]”使用它的s.“print[s]”可以使用repr\uu
函数创建一个包含列表可打印表示形式的字符串,然后使用字符串转义
编码对字符串进行解码,该编码将返回字符串的字节字符串。然后,通过打印字节字符串,终端将按照默认编码(通常为UTF8)自动对其进行编码:
但请注意,因为在python 3.X中我们只有unicode,所以不需要使用以下技巧:
Python 3.4.3 (default, Oct 14 2015, 20:28:29)
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> s='½'
>>> print ([s])
['½']
有关python编码的更多信息,请阅读:'\xc2\xbd'
是python 2上字节的可打印表示形式,其中不可打印(is0
)字节替换为其十六进制代码,例如,0xc2
字节显示为\xc2
,如中所示
这是怎么回事
s
在REPL中显示,默认情况下使用可自定义的调用
print s
按原样放置字节,编辑器和控制台使用兼容的编码,因此您没有mojibake:字节映射到相同的标志符号:½
(Unicode代码点:)
print[s]
打印列表(它调用str(您的列表)
)<代码>报告(项)
为每个列表项调用
如何打印Unicode字符串列表?(即我想看[½])
使用Unicode处理文本:
(a) 特别是,使用Unicode字符串文本而不是bytestring文本:添加来自未来的导入Unicode\u文本
或使用u'
前缀:s=u'½'
(b) 声明源代码的字符编码,在顶部添加:#-*-编码:utf-8-*-
(注意:它只影响源代码;它与运行时可能使用的字符编码无关)
要将Unicode字符串列表打印为文本,请先将其序列化为字符串:
print ", ".join([u'½'])
# -> ½
如果需要与其他程序交换数据;您可以使用JSON格式:
import json
print json.dumps([u'½'])
# -> ["\u00bd"]
print json.dumps([u'½'], ensure_ascii=False)
# -> ["½"]
不要使用字符串转义
,而是修复您的数据格式。这些不是Unicode字符串,它们是由testrings进行UTF-8编码的。我明白了……那么为什么“print s”和“print[s]”对编码的处理方式不同呢?因为这就是列表的工作方式。
工作方式。@Yaroslav:print s
使用字符串的,只需s
和print[s]
使用它的u_urepr_u_u。奇怪的是,它能工作。它如何知道解码转义的UTF8字符串?@RemcoGerlich它正在解码字节和打印字节。唯一解码UTF-8的是终端。@RemcoGerlich,因为string\u escape
将生成一个字符串,该字符串适合作为Python源代码中的字符串文字。当您打印字符串时,您的IDE或终端可能会使用默认编码(几乎是utf8)对字符串进行解码。我原以为str.decode()的目的总是将字节字符串解码为Unicode字符串,但现在我读到,我看到有几个str-to-str编解码器。不知道。
print ", ".join([u'½'])
# -> ½
import json
print json.dumps([u'½'])
# -> ["\u00bd"]
print json.dumps([u'½'], ensure_ascii=False)
# -> ["½"]