pythonutf8转gbk编码
1. 如何修改python文件的编码格式
可以知道的是,文本文件的默认编码并不是utf8。
我们打开一个文本文件,并点击另存为
2
我们在新窗口的编码一栏看到默认编码是ANSI。先不管这个编码是什么编码,但是通过下拉列表我们知道,这种编码不是utf8。
END
编码测试
1
对于Python里面的中文显示,我们常常使用utf8和gbk的编码。对于这两种编码笔者就不介绍了,总之都是专门可以处理中文的编码方式啦。
2
我们首先对文本文件测试了gbk解码。我们发现,此编码下文本文件内容可以正常显示,但是使用utf8解码,程序出错,抛出decodeError异常
3
同样的,我们对Python脚本文件测试了utf8解码。我们发现,此编码下文本文件内容可以正常显示,但是使用gbk解码,中文部分出现乱码
4
测试说明,对于文本文件需要使用gbk解码,而对于脚本文件需要utf8解码,也就是说,文本文件是gbk编码的,而脚本则是utf8
2. python2.7 utf-8转gbk 乱码
windows的本地默认编码是cp936(gbk编码),Windows中直接打印utf-8的字符串是乱码
将你文件申明为UTF-8保存
#coding:utf-8
def respeak(self):
cText =pyperclip.paste()
gt = cText.decode('utf-8').encode('gbk')
self.ui.mainT.setText(QtCore.QString(gt))
3. python 编码转换
A. Usage decode/encode:
def utf2gbk(s):
''' 按utf-8解码,再按gbk编码 '''
return s.decode('utf-8').encode('gbk')
with open(fname) as handle:
for ln in handle:
print utf2gbk(ln)
B. Usage codecs:
import codecs
env_coding='gbk' # 设置一个系统环境编码
with codecs.open(fname, 'r', 'utf-8') as handle:
for ln in handle:
# print ln # 此时的ln是unicode
print ln.encode(env_coding) # 按设定系统环境编码输出
4. python输出到文件乱码如何解决
python代码文件的编码
py文件默认是ASCII编码,中文在显示时会做一个ASCII到系统默认编码的转换,这时就会出错:SyntaxError: Non-ASCII character。需要在代码文件的第一行或第二行添加编码指示:
1 # coding=utf-8 ##以utf-8编码储存中文字符
2 print '中文'
像上面那样直接输入的字符串是按照代码文件的编码来处理的,如果用unicode编码,有以下三种方式:
1 s1 = u'中文' #u表示用unicode编码方式储存信息
2 s2 = unicode('中文','gbk')
unicode是一个内置函数,第二个参数指示源字符串的编码格式。
decode是任何字符串具有的方法,将字符串转换成unicode格式,参数指示源字符串的编码格式。
encode也是任何字符串具有的方法,将字符串转换成参数指定的格式。
(2)、字符串的编码
用 u'汉字' 构造出来的是unicode类型,不用的话构造出来是str类型
str的编码是与系统环境相关的,一般就是sys.getfilesystemencoding()得到的值
所以从unicode转str,要用encode方法
从str转unicode,所以要用decode
例如:
# coding=utf-8 #默认编码格式为utf-8
s = u'中文' #unicode编码的文字
print s.encode('utf-8') #转换成utf-8格式输出
但当python中间处理非ASCII编码时,经常会出现如下错误:
UnicodeDecodeError: 'ascii' codec can't decode byte 0x?? in position 1: ordinal not in range(128)
0x??是超出128的数字,python在默认的情况下认为语言的编码是ascii编码,所以无法处理其他编码,需要设置python的默认编码为所需要的编码。
一个解决的方案是在代码中添加:
import sys
reload(sys)
sys.setdefaultencoding('utf-8') (其中utf-8为你想输出的字符编码)
解释:
sys.setdefaultencoding方法在python导入site.py后就删除了(具体代码查看site.py就可以看到)因此如果想用的话可以再重新load进入
总结:
u=u'unicode编码文字'
g=u.encode('gbk') #转换为gbk格式
print g #此时为乱码,因为当前环境为utf-8,gbk编码文字为乱码
str=g.decode('gbk').encode('utf-8') #以gbk编码格式读取g(因为他就是gbk编码的,需要事先知道它是GBK编码)并转换为utf-8格式输出
print str #正常显示中文(同文件输出)
安全的方法:
s.decode('gbk','ignore').encode('utf-8′) #以gbk编码读取(当然是读取gbk编码格式的文字了)并忽略错误的编码,转换成utf-8编码输出。
推荐学习《Python教程》!
5. Python2.7为什么Utf-8到GBK会变成乱码
程序没缩进,看着费劲!
#coding=utf-8
defrespeak():
cText=u'中文'#pyperclip.paste()
print(cText)
printrepr(cText)
print(' Afterencode:')
gbk_text=cText.encode('gbk')
print(gbk_text)
printrepr(gbk_text)
print(' Afterdecode:')
real_text=gbk_text.decode('gbk')
print(real_text)
printrepr(real_text)
if__name__=='__main__':
respeak()
[willie@localhost pys]$ python2.7 speak.py
中文
u'u4e26587'
After encode:
���
'xd6xd0xcexc4'
After decode:
中文
u'u4e26587'
6. python utf8 gbk 编码问题
你是不是想在python里把中文变成链接中%E5%BE%85这种形式?直接用urllib.urlencode({'word':'中文'})方法
而显示\xe5\xbe\x85\是因为你没有使用read()方法,加上后变成:'待解析网页'.decode('gbk').encode('utf-8').read(),就是你熟悉的中文了。
不过,'待解析网页'.decode('gbk').encode('utf-8')这句我要吐槽一下,网页明显是utf-8编码,你在文件开头声明utf-8编码就可以了,这一句是多余的。在这基础上读取网页直接用 '待解析网页'.read()
7. Python处理不同编码utf8和gbk的问题
有。
使用chardet库。它会去猜测文本文件的编码,并返回形如:
编码类型:utf-8
置信度:0.9
这样的结果,也就是说chardet断定该文件有90%的可能性是utf-8编码的。
不过chardet的缺陷就是,它不能完全100%确定文件的编码类型。
目前我的做法是,如果置信度超过0.95,那么就认定chardet的判断结果是正确的。否则,再加上一些人机交互操作进行判断。
目前,chardet库官网提供的版本只适用于Python 2,如果您使用的是Python 3.x,我可以另外上传一个。
8. utf-8编码的页面如何转成gbk编码的页面(急)
要做两件事:
1. 内容替换:把文件里的charset=utf-8字样改为charset=gb2312
2. 编码转换:把文件保存成gb2312格式的,用记事本按照utf8打开后,选择保存时设置成ansi的编码方式。
如果文件很多,建议用Replace Pioneer来批量完成,详细步骤如下:
* 批量内容转换
1) 安装Replace Pioneer,并打开Tools->Batch Runner菜单
2) 点击Pick Files选择多个待处理的html文件
3) 点击Fast Replace
点击Add,在Search输入charset=utf-8(具体内容对于不同的html可能不尽一致),在replace输入charset=gb2312
4) 点击Start完成内容替换。
* 批量编码转换
1) 打开Tools->Batch Runner菜单
2) 点击Pick Files选择多个待处理的html文件
3) 点击Change Encode,选择utf8作为input encoding,选择CN->gbk作为output encoding,点击Start即可。
注意提前备份,以防误操作。
** 补充回答:以上批量操作的步骤是使用Replace Pioneer来完成的