打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
python IDLE编码无法保存?

python IDLE编码无法保存(2.7.11)# -*- coding:utf-8 -*- 声明

作为一个初学者,在实践过程中会碰到很多的问题,在不断的解决问题中壮大自己是驱动我学习的动力。

今天用python 2.7.11,自带的IDLE编了一些代码,但是发现无法保存,后来查阅很多资料发现原来需要在代码的开始加上 # -*- coding:utf-8 -*- 这个命令行。

根据网上的说法,在# -*- coding:utf-8 -*- 是为了在处理IDLE中的中文字符不出错。如果代码中含有中文字符 需要通过utf-8这个格式处理,否则系统默认为ACSII编码。

貌似  python3.X的版本不用这个声明

另外,程序中中文乱码的处理方法(网上收集):


程序中有 打印中文的命令时,如果输出的为乱码,可以在程序的开始阶段输入声明:

# -*- coding: cp936 -*-

或者


方法一:

在文件的开头加入编码声明:

#coding = gbk

s = '谷歌'

print s

输出结果:谷歌

 


方法二:

在输出时进行转码:

#coding = utf-8

s = '谷歌'

print unicode(s,'gbk')

输出结果:谷歌

txt文件中文乱码处理

某些软件,如notepad,在保存一个以utf-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xef 0xbb 0xbf,即bom)。因此我们在读取时需要自己去掉这些字符,python中的codecs module定义了这个常量

# coding=gbk 

import codecs

data = open("test.txt").read()

if data[:3] == codecs.bom_utf8:

datadata = data[3:]

print data.decode("utf-8")


用unicode函数和decode方法把str转换成unicode。为什么这两个函数的参数用"gbk"呢?
第一反应是我们的编码声明里用了gbk(# coding=gbk),但真是这样?
修改一下源文件:

# coding=utf-8
s = "中文"
print unicode(s, "utf-8")


运行,报错:

traceback (most recent call last):
  file "chinesetest.py", line 3, in <module>
    s = unicode(s, "utf-8")
unicodedecodeerror: 'utf8' codec can't decode bytes in position 0-1: invalid data


显然,如果前面正常是因为两边都使用了gbk,那么这里我保持了两边utf-8一致,也应该正常,不至于报错。
更进一步的例子,如果我们这里转换仍然用gbk:
# coding=utf-8
s = "中文"
print unicode(s, "gbk")
结果:中文


上一篇win7系统Python 下配置 numpy
 
下一篇Python print函数用法,print 格式化输出 (转自http://www.pythonclub.org/python-basic/print)
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Python异常UnicodeEncodeError: ''gbk'' codec can''t encode character ''
python 中文乱码问题深入分析
python3:(unicode error) 'utf-8' codec can't decode
Python的中文编码问题
Python 黑魔法之 Encoding & Decoding
Python 编码为什么那么蛋疼?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服