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

时间:2023-01-05 09:51:31

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

今天用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")
结果:中文