Python “中使用的不同编码”;打印s";vs";打印“;?

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)自

当我在IPython笔记本中执行以下操作时

s='½'
s
print s
print [s]
我明白了

  • 这是怎么回事
  • 如何打印Unicode字符串列表?(即我想看[½])
  • 编辑
    所以从评论来看,看起来区别在于“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上
    字节的可打印表示形式,其中不可打印(is
    0
    )字节替换为其十六进制代码,例如,
    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)
    # -> ["½"]