1
julyclyde 2015-07-27 23:09:14 +08:00
1 我这里是CST结尾,不是几个汉字结尾
2 你运行该程序的console是UTF-8的吗?Windows cmd应该是GBK的吧 |
2
VicYu 2015-07-27 23:15:18 +08:00
win7 python2.7 ipython测试为中国标准时间
Mac python2.7 console测试为CST 表示,如果是乱码,试试.encode('GBK') |
3
lilydjwg 2015-07-27 23:34:50 +08:00
基本可以确定:
* 你使用的是 Python 2 * 你使用的是 Windows 这些乱码是由于将 GBK 编码的字符串当作 latin1 编码解释造成的。你需要设置显示这些文字的工具使用 GBK 编码来解释该输出。 |
4
lilydjwg 2015-07-27 23:35:45 +08:00
@VicYu strftime 的返回值是 bytes,不应当再使用 .encode 方法进行编码——它已经是 GBK 编码的了。
|
5
ligyxy 2015-07-27 23:54:59 +08:00
楼主在CMD里运行的?
|
6
sbmzhcn OP 我在pycharm里面运行的。在sublime运行一样出错。在pyhton自带的ide里面运行正常。用的是windows7 python3
|
9
lilydjwg 2015-07-28 15:11:03 +08:00
@sbmzhcn 哦哦,是在奇怪的环境里执行的。出问题的原因应该是这些工具给 Python 3 提供的终端的编码处理有问题。Python 3 给它们输出了操作系统默认的 GBK 编码,而它们却当成 latin1 编码给显示出来了。
一句话说就是:pycharm 和 sublime 的中文支持有问题。 |
10
VicYu 2015-07-28 15:38:33 +08:00
|
11
VicYu 2015-07-28 15:44:02 +08:00
@lilydjwg 大哥,你能不能不要一个洞一个洞挖了填,填了挖,回答问题就有个回答问题的态度。
升级python3一直以来最大的好处就是默认编码unicode换成utf8。pycharm和sublime都是utf-8默认编码,并且sublime在执行的时候会转换为ascii的编码环境,此编码环境的utf-8支持输出。 time.strftime的输出是str类型,strftime对输出编码进行了系统匹配,这是函数的问题。 |
12
VicYu 2015-07-28 16:16:22 +08:00
@sbmzhcn
http://svn.python.org/view/python/trunk/Modules/timemodule.c?revision=81756&view=markup 在查看了time函数的源码后,508行 buflen = strftime(outbuf, i, fmt, &buf); time函数实现时调用C库的strftime() 。那这个函数的实现就是系统相关的,对于现在的编码问题,就是win的c库strftime() %Z返回的GBK编码的‘中国标准时间’。 |
13
lilydjwg 2015-07-28 16:27:10 +08:00
@VicYu 首先,不要叫我大哥。
你不要不懂 Python 乱说话。你都知道 strftime 的输出是 str 类型的了,却不知道 str 是不区分编码的?str 就是字符串,映射到 Unicode 码点的,编码无关。Python 在**输出** str 的时候根据输出目标(或者系统默认,如果没办法知道输出目标是支持什么编码的话)来决定用什么字符编码把 str 编码成 bytes。pycharm 等没能正确地告诉 Python 它会以 latin1(or whatever)来解释 Python 的输出,所以乱码了。 |
15
lilydjwg 2015-07-28 16:30:27 +08:00
@VicYu 在 Python 3 里,你不能 decode 一个 str,因为它是已解码数据。同样,你也不能 encode 一个 bytes,因为它是已编码数据。
AttributeError: 'str' object has no attribute 'decode' 态度?回答是错的态度再好有什么用? |
18
sbmzhcn OP @VicYu print(time.strftime('%Y-%m-%d %X %Z').decode('GBK').encode('utf-8')) 这个执行不了的。因为str不能decode. AttributeError: 'str' object has no attribute 'decode'
我知道是编码问题,在linux上面应该没这个问题。非常小的问题,但看到出现乱码就心里不爽。 现在还没找到解决办法。 |
19
seeds 2019-02-14 09:56:37 +08:00
如果是在 pycharm 中运行的话,%Z 显示时区会有编码问题,time 函数中支持小写的%z 显示时区
|