python 2 编码问题
python一共有编码类型
utf-8
utf-16
GB2312
GB18030
GBK
python2 默认的编码模式是ascii,对于字符串默认是unicode编码,
因此无法直接显示中文字符串,我们在态势感知查询前加了个u 用unicode编码,输出就正常,
但是告警详情却乱码是因为我们py文件顶部写了 默认了用utf-8解码,所以unicode编码,utf-8解码就出现乱码# -*- coding:UTF-8 -*-
api_params = {
u"态势感知查询":{"Action": "1",},
"告警详情":{"Action": "2",}
}
for k,v in api_params.items():
print type(k)
print k,v
输出结果
<type 'str'>
鍛婅璇︽儏 {'Action': '2'}
<type 'unicode'>
态势感知查询 {'Action': '1'}
解决办法有很多种,
- 定义默认解码用Unicode解码
# -*- coding:gb18030 -*-
- 用python2自带的unicode方法
unicode()
方法转换 - 或者decode("utf-8")
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
api_params = {
"态势感知查询":{"Action": "1",},
"告警详情":{"Action": "1",}
}
for k,v in api_params.items():
print unicode(k)
print k.decode("utf-8"),v
unicode乱码
有时候返回的数据格式b'\u516c\u4f17' 就是unicode编码后的结果,解码用decode("unicode_escape")
或者确认当前环境的编码格式后再解码,比如 a.encode(""utf-8).decode("unicode_escape")
zip乱码
主要看这行i.encode('cp437').decode('gbk'))
,可以正确读取zip中压缩文件的中文名字
import zipfile
def is_zip_file_valid(zip_path):
try:
with zipfile.ZipFile(zip_path, 'r') as zip_ref:
# 尝试读取第一个文件的名字(如果文件列表为空,抛出异常)
for i in zip_ref.namelist():
# 可以转换成正确的中文模式
print(i.encode('cp437').decode('gbk'))
first_file_name=zip_ref.namelist()[0]
# 尝试读取第一个文件的内容(这一步可以验证文件能否正常解压)
with zip_ref.open(first_file_name) as first_file:
first_file_content = first_file.read()
# 如果没有抛出异常,文件被认为是有效的
# print("文件内容",first_file_content)
return True
except (zipfile.BadZipFile, IndexError, FileNotFoundError, EOFError, RuntimeError) as e:
# 捕获任何在读取或解压缩文件时可能抛出的异常
print(f"Error occurred: {e}")
return False```plaintext