推荐学习书目
› Learn Python the Hard Way
Python Sites
› PyPI - Python Package Index
› http://diveintopython.org/toc/index.html
› Pocoo
值得关注的项目
› PyPy
› Celery
› Jinja2
› Read the Docs
› gevent
› pyenv
› virtualenv
› Stackless Python
› Beautiful Soup
› 结巴中文分词
› Green Unicorn
› Sentry
› Shovel
› Pyflakes
› pytest
Python 编程
› pep8 Checker
Styles
› PEP 8
› Google Python Style Guide
› Code Style from The Hitchhiker's Guide
lhstock
V2EX  ›  Python

Python 2.7.10 print 中文了? 然后我凌乱了!!!!

  •  
  •   lhstock · Nov 29, 2017 · 5911 views
    This topic created in 3267 days ago, the information mentioned may be changed or developed.

    初学者,coding 验证 “字符串与编码”时,发现无需加'u'可输出中文。

    我记得之前(几个月前)是不行的。搜了一下并未有提及 2.7 支持中文的说法;然后做了一些环境的测试后我凌乱了。

    • 有些可以输出
    • 有些部分乱码
    • 甚至有些会报错(“些”==1 )

    不会贴图还望见谅

    测试代码:

    # !/usr/bin/python
    #  -*- coding: utf-u -*-
    str = '吃'
    print str
    print (u'吃')
    print u'吃'
    

    输出

    ****环境 1:Mac****
    吃
    吃
    吃
    
    ****window10 - cmd ***
    鍚
    吃
    吃
    
    ***windows10 - Git_bash
    吃
    Traceback (most recent call last):
      File "2-stringCode.py", line 14, in <module>
        print (u'吃')
    UnicodeEncodeError: 'ascii' codec can't encode character u'\u5403' in position 0: ordinal not in range(128)
    
    ****window10 - Visual Studio Code 调试器****
    吃
    吃
    吃
    

    我。。。。。凌乱了;

    枉各位大佬不吝指教

    18 replies  •  2017-11-29 20:29:02 +08:00
    binux
    binux
    Nov 29, 2017
    1
    老生常谈的问题了,还拿出来问,看着烦。你就不会自己去搜一下吗?
    likuku
    likuku
    Nov 29, 2017
    2
    2.x 很快就要停止支持了,怎么还不觉悟?
    lhstock
    lhstock
    OP
    Nov 29, 2017
    3
    @binux 我搜了啊。看了一部分是讲 print '吃' 但返回的是 unicode 编码 '\u5403'时应该 print u'吃‘来正确打印出“吃” ;真不知道怎么搜没有 u 直接出来 utf-8 编码;
    lhstock
    lhstock
    OP
    Nov 29, 2017
    4
    @likuku emmm....那我直接 3.0 吧 。但是我真的很好奇这个问题
    yazi
    yazi
    Nov 29, 2017
    5
    utf-u 是什么
    likuku
    likuku
    Nov 29, 2017
    6
    win10 的 cmd 默认字符集还是 GBK,得 chcp 65001 才会变成 UTF-8

    py2.x 支持处理中文信息(变量 /函数 /类 不能用中文)也不是很难,至少保证下面即可:
    .py 头放上指定编码的魔法字串:
    # !/usr/bin/python
    # -*- coding: utf-8 -*-

    .py 使用 UTF-8 保存

    运行的系统环境 /终端 确保也用 UTF-8,读写的数据库 /文本文件,统统保证是 UTF-8 编码

    2.x 没多少日子活了,最好还是直接 3.x
    likuku
    likuku
    Nov 29, 2017
    7
    如 https://www.v2ex.com/t/410349#reply6

    条件具备时,2.x 里直接 print('中文') 本就是没问题
    ysc3839
    ysc3839
    Nov 29, 2017 via Android❤️9
    8
    你的源文件编码是 UTF-8,所以不加 u 的字符串是 UTF-8 编码的。
    Mac: 终端默认编码 UTF-8,所以第一个 print 没问题。
    cmd: 终端默认编码 CP936,所以第一个 print 乱码。
    Git bash: 终端默认编码是 UTF-8,所以第一个 print 没问题,但是 Python 检测错了,以为终端编码是 ASCII,所以转换时出错。
    VSCode: 情况同 Mac。
    lhstock
    lhstock
    OP
    Nov 29, 2017
    9
    @yazi 源码里是"utf-8",这里手敲时打错了,抱歉。
    lhstock
    lhstock
    OP
    Nov 29, 2017
    10
    @likuku @ysc3839 感谢两位。原来我忽略了终端的编码设置。
    IllllI
    IllllI
    Nov 29, 2017
    11
    哎
    5oiR5piv5YK76YC8
    5oiR5piv5YK76YC8
    Nov 29, 2017
    12
    恼火,早点换 3 把,utf-8 统一世界
    yepinf
    yepinf
    Nov 29, 2017
    13
    试试这
    `from __future__ import unicode_literals`
    xubeiyan
    xubeiyan
    Nov 29, 2017
    14
    还有人认为 py2 只要指定文件编码,加不加 u 对字符串没影响吗? @ysc3839 @likuku
    ```python
    # coding:utf-8
    str = '你好世界'
    u_str = u'你好世界'
    print str
    print u_str
    ```
    上面代码保存成 utf-8 在 cmd 下跑一下试试……
    likuku
    likuku
    Nov 29, 2017
    15
    @xubeiyan “ win10 的 cmd 默认字符集还是 GBK,得 chcp 65001 才会变成 UTF-8 ”,这行没看到么?
    lhstock
    lhstock
    OP
    Nov 29, 2017
    16
    @xubeiyan 抱歉,我把你的反问理解为:“你诶特的两位 认为 py2 只要指定文件编码就无所谓加 u 了";而我从两位的答案看出:“我所遇到的问题是因为执行终端默认编码不同导致的"。我觉得你理解有误。
    lhstock
    lhstock
    OP
    Nov 29, 2017
    17
    @yepinf 好的。我晚上回家试试。因为家里的 PC 可以复现
    xubeiyan
    xubeiyan
    Nov 29, 2017❤️1
    18
    @lhstock 本来他两人就理解错了,在 python2 里面本来 u'你好世界'和'你好世界'就是不一样的,后者是 str,前者是 unicode,你可以加上 type(str)和 type(u_str)验证一下,为什么你在 cmd 里看起来差不多呢?因为在输出的时候 print 执行了一次转码……
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1191 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 52ms · UTC 00:06 · PVG 08:06 · LAX 16:06 · JFK 19:06
    ♥ Do have faith in what you're doing.