⑴ python3 中文输出乱码问题
python 3和2很大区别就是python本身改为默认用unicode编码。
字符串不再区分"abc"和u"abc", 字符串"abc"默认就是unicode,不再代表本地编码、
由于有这种内部编码,像c#和java类似,再没有必要在语言环境内做类似设置编码,比如“sys.setdefaultencoding”;
也因此也python 3的代码和包管理上打破了和2.x的兼容。2.x的扩展包要适应这种情况改写。
另一个问题是语言环境内只有unicode怎么输出gbk之类的本地编码。
答按惯例都在(序列化)输出时才转换成本地编码。
比如
file.write("GBK的中文".encode("GBK"))
python环境内字符串用str.encode("GBK")方法输出成字节串用于和其他环境交流。
⑵ python写文件中文乱码
解决思路:
修改excel 打开csv 文件的编码(可能会影响其它文件的打开,不作为首选方式)
修改python 打开文件的编码 utf-8 -> utf-8-sig
修改前的编码
f=open(filename,'w',encoding='utf-8')
修改后的编码
f=open(filename,'w',encoding='utf-8-sig')
⑶ python 用logging打log 第二天中文都是乱码 å<8d><8e>å¸<9d>
你用ue或者兼容uft8的工具打开这个文件
或者转成gbk保存试试
⑷ python中文显示乱码,已经在开头有了coding: utf-8
乱码原因:
因为你的文件声明为 utf-8,并且也应该是用 utf-8 的编码保存的源文件。但是 windows 的本地默认编码是 cp936,也就是 gbk 编码,所以在控制台直接打印 utf-8 的字符串当然是乱码了。
解决方法:
py文件用记事本打开,另存为utf-8格式即可
⑸ python命令行输入中文乱码怎么办
python2.X,代码中指定了UTF-8,但是在cmd命令行窗口时,打印的中文仍然会乱码。
在python3不存在该问题
运行结果:
原因
中文windows默认的输出编码为gbk ,与脚本中定义的UTF-8不一样,所以出现了解码失败的情况。
相关推荐:《Python基础教程》
解决方法
有如下两种方法可以解决这个问题
方法一
我们可以通过先把中文解码为unicode,然后再转化为gbk来解决这个问题:
修改后运行结果:
方法二
当然,我们也可以通过改变cmd命令行窗口的输出格式来解决这个问题:
·chcp 65001 就是换成UTF-8代码页
·chcp 936 可以换回默认的GBK
但是这样就降低了脚本的兼容性,在其他环境运行的时候可能还会出现这样的错误,而且可能会影响其他脚本运行,所以推荐使用第一种方法。
⑹ python中的中文乱码问题
你的运行环境应该是Windows的cmd下吧
#!/usr/bin/python
#coding:utf-8
os_char='gb18030'
printu"直接打印Unicode"
printu"Unicode转换成GB18030".encode(os_char)
print"UTF-8中文转换到GB18030,然后再打印".decode("utf-8").encode(os_char)
⑺ python编程中中文输出乱码UnicodeEncodeError: 'ascii' codec can't encode character
楼主你好!
其实按照你的代码的逻辑来做是没有错的,无法显示成utf-8编码的文本其实是因为在request请求的时候,按照网页的标识转了码,接着BeautifulSoup把已经是utf-8的文本又强转了一次utf-8编码,导致了无法正确的显示,以想要拿到的时间为例,其实程序的目标字符串应该如下:
#-*-coding:utf-8-*-
'''我们想要使用的字符串'''
target_str=':53'
'''两次转码后的字符串'''
get_str=u':53'
归根结底是两个对象的类不同,但python不支持这两种类型的强转,个人想了个比较临时的解决方案,算是个python打了个补丁,就是将字符串转成二进制,再转回字符串,这样就unicode就不用给他加上编码方式再转成二进制字符串了,修改后的代码如下:
#-*-coding:utf-8-*-
importrequests
frombs4importBeautifulSoup
fromdatetimeimportdatetime
defencode(s):
'''将字符串转成二进制'''
return''.join([bin(ord(c)).replace('0b','')forcins])
defdecode(s):
'''将二进制转换成字符串'''
return''.join([chr(i)foriin[int(b,2)forbins.split('')]])
res=requests.get('
)
res.encodeing='utf-8'
soup=BeautifulSoup(res.text,'html.parser')
'''每个中文字符都进行转换处理'''
title=decode(encode(soup.select('#artibodyTitle')[0].text))
time=decode(encode(soup.select('.time-source')[0].contents[0].strip()))
chinese='%Y年%m月%d日%H:%M'
timesource=datetime.strptime(time,chinese)
print(title)
print(timesource)
看楼主在研究的过程中,对字符串的编码原理的理解还有所欠缺,这方面的资料在网上很多,可以再自行研究一下,能够获得长足的进步。
望采纳,谢谢!
⑻ python 使用logging,生成的log文件是什么编码格式脚本的编码格式决定系统的编码格式决定
log的文件当然是byte格式。或者是无格式的。汉字编码取决于你自己设定的类型。
#coding:utf-8这个东西,只在python2下有效果。还需要编程器配合。你使用python自带的idle当然是没有问题的。
log中的汉字是一定要编码的。不编码你存贮不了。
编辑器本身的缺省编码格式要与你的源代码编码一致,不然看到的就是乱码。如果是idle,它会根据python脚本自动识别。
不过有些编辑器是有些不智能的。它不能理解python脚本第一行的提示。所以有时候,觉着很别扭自己要手工保持编辑器的编码与源码一致。还需要维护那个coding:utf-8
不过python3已将这一句去掉了。源代码全部要求使用utf-8编码(也许是utf-16),我很少用python3
⑼ python log中文乱码
Python log出现中文乱码的解决方法:修改“handle”的“encode”参数为“utf-8”,即在源码中修改“encoding='utf-8'”。
python log写入中文乱码,直接修改handle的encode参数为utf-8
即在源码中修改encoding='utf-8',因为 logging.basicConfig() 配置时实际上是用到了4大组件,只不过给了默认值,在loging.FileHandler()方法中默认是这样的。
只需在源码中修改。
推荐课程:零基础入门学习Python(小甲鱼)