V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
rebeccaMyKid
V2EX  ›  问与答

python2.7 print 隐式 decode 的问题

  •  
  •   rebeccaMyKid · 2017-08-15 09:38:56 +08:00 · 1274 次点击
    这是一个创建于 2668 天前的主题,其中的信息可能已经有所发展或是发生改变。

    my_unicode = u"Hi \u2119\u01b4\u2602\u210c\xf8\u1f24"

    怎么我在 2.7 下直接 print 出来式可以的,而 ppt 里给的是错误?

    >>> print my_unicode
    Hi ℙƴ☂ℌøἤ
    

    文章链接

    5 条回复    2017-08-15 10:40:07 +08:00
    glasslion
        1
    glasslion  
       2017-08-15 09:56:07 +08:00
    和你的命令行的 locale/language 设置有关,utf-8 就不会报错
    rebeccaMyKid
        2
    rebeccaMyKid  
    OP
       2017-08-15 10:14:02 +08:00
    @glasslion 能简单讲讲吗?
    这么理解对不对:
    print 需要的是 bytes,那如果我直接 print 会有一个隐式的 decode,而这个 decode 是根据终端的设置来的。
    但 `"Hello " + my_unicode` 这里的隐式 decode 就是跟 sys.getdefaulencoding()相关的。

    这么理解对吗?
    glasslion
        3
    glasslion  
       2017-08-15 10:21:52 +08:00   ❤️ 1
    @rebeccaMyKid

    1. ` locale.getpreferredencoding()` 是 Python 在 open 文件时默认使用的 encoding
    2. `sys.getdefaultencoding() ` 是 Python 进行 str/unicode(byte/str) 转换时默认使用的 encoding
    3. `sys.getfilesystemencoding()` 是用来 encoding 文件**名**的, 例如 open('ℙƴ☂ℌøἤ,txt')
    4. 标准输入输出(print)的 encoding:
    4.1 若设置了 `PYTHONIOENCODING` 环境变量, 则以次变量为准
    4.2 标准输入输出是打到终端的话, 看终端的 locale 配置,e.g. linux 的 LANG 环境变量, 在 windows cmd 的代码页
    4.3 标准输入输出被重定向到文件的话, 则参照 1, 用的是 ` locale.getpreferredencoding()`
    fxxkgw
        4
    fxxkgw  
       2017-08-15 10:23:25 +08:00   ❤️ 1
    @rebeccaMyKid 有个地方不对
    u ’中文’=‘中文’.decode(encode) 这个地方就是你说的隐式 decode
    此处 encode 值为 sys.stdin.encoding,而不是 sys.getdefaulencoding()
    sys.getdefaulencoding()是系统编码 sys.stdin.encoding sys.stdout.encoding 是终端 两者不一样 前者一般是 ASCII 后者一般是 utf-8
    rebeccaMyKid
        5
    rebeccaMyKid  
    OP
       2017-08-15 10:40:07 +08:00
    @fxxkgw 不对啊,print 是 sys.stdout.encoding,但 u'中文'.decode()这个用的是 sys.getdefaultencoding()
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3363 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 11:59 · PVG 19:59 · LAX 03:59 · JFK 06:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.