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

2017-11-29 00:51:43 +08:00
 lhstock

初学者,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 调试器****
吃
吃
吃

我。。。。。凌乱了;

枉各位大佬不吝指教

4966 次点击
所在节点    Python
18 条回复
binux
2017-11-29 00:55:33 +08:00
老生常谈的问题了,还拿出来问,看着烦。你就不会自己去搜一下吗?
likuku
2017-11-29 01:14:21 +08:00
2.x 很快就要停止支持了,怎么还不觉悟?
lhstock
2017-11-29 01:21:06 +08:00
@binux 我搜了啊。看了一部分是讲 print '吃' 但返回的是 unicode 编码 '\u5403'时应该 print u'吃‘来正确打印出“吃” ;真不知道怎么搜没有 u 直接出来 utf-8 编码;
lhstock
2017-11-29 01:23:24 +08:00
@likuku emmm....那我直接 3.0 吧 。但是我真的很好奇这个问题
yazi
2017-11-29 01:26:30 +08:00
utf-u 是什么
likuku
2017-11-29 01:33:07 +08:00
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
2017-11-29 01:36:21 +08:00
https://www.v2ex.com/t/410349#reply6

条件具备时,2.x 里直接 print('中文') 本就是没问题
ysc3839
2017-11-29 01:47:33 +08:00
你的源文件编码是 UTF-8,所以不加 u 的字符串是 UTF-8 编码的。
Mac: 终端默认编码 UTF-8,所以第一个 print 没问题。
cmd: 终端默认编码 CP936,所以第一个 print 乱码。
Git bash: 终端默认编码是 UTF-8,所以第一个 print 没问题,但是 Python 检测错了,以为终端编码是 ASCII,所以转换时出错。
VSCode: 情况同 Mac。
lhstock
2017-11-29 09:23:45 +08:00
@yazi 源码里是"utf-8",这里手敲时打错了,抱歉。
lhstock
2017-11-29 09:27:54 +08:00
@likuku @ysc3839 感谢两位。原来我忽略了终端的编码设置。
IllllI
2017-11-29 10:01:39 +08:00
Marmot
2017-11-29 10:53:56 +08:00
恼火,早点换 3 把,utf-8 统一世界
yepinf
2017-11-29 14:50:31 +08:00
试试这
`from __future__ import unicode_literals`
xubeiyan
2017-11-29 16:56:36 +08:00
还有人认为 py2 只要指定文件编码,加不加 u 对字符串没影响吗? @ysc3839 @likuku
```python
# coding:utf-8
str = '你好世界'
u_str = u'你好世界'
print str
print u_str
```
上面代码保存成 utf-8 在 cmd 下跑一下试试……
likuku
2017-11-29 17:11:43 +08:00
@xubeiyan “ win10 的 cmd 默认字符集还是 GBK,得 chcp 65001 才会变成 UTF-8 ”,这行没看到么?
lhstock
2017-11-29 17:34:42 +08:00
@xubeiyan 抱歉,我把你的反问理解为:“你诶特的两位 认为 py2 只要指定文件编码就无所谓加 u 了";而我从两位的答案看出:“我所遇到的问题是因为执行终端默认编码不同导致的"。我觉得你理解有误。
lhstock
2017-11-29 17:35:46 +08:00
@yepinf 好的。我晚上回家试试。因为家里的 PC 可以复现
xubeiyan
2017-11-29 20:29:02 +08:00
@lhstock 本来他两人就理解错了,在 python2 里面本来 u'你好世界'和'你好世界'就是不一样的,后者是 str,前者是 unicode,你可以加上 type(str)和 type(u_str)验证一下,为什么你在 cmd 里看起来差不多呢?因为在输出的时候 print 执行了一次转码……

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/410349

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX