python中的代码编码格式转换问题


Posted in Python onJune 10, 2015

刚来这个公司,熟悉了环境,老大就开始让我做一个迁移、修改代码的工作,我想说的是,这种工作真没劲~~,看别人的代码、改别人的代码、这里改个变量、那里改个文件名······,都是些没技术含量、很繁琐的事情,不过通过迁移代码顺便熟悉下环境也好。扯了这么多,说说今天的主题吧——代码编码格式改变,由于某些原因,需要将代码从A机房迁移到B机房,这两个之间不能互相访问,但是历史原因导致A机房的代码全是utf8编码的,B机房要求是GBK编码,看看这个怎么解决。

编码问题

先说说为什么会有编码问题,就拿上面那个例子来说,B机房这边数据库全是GBK编码的,因此从数据库中取出来的数据都是GBK的,从数据库中取出来的数据是GBK编码的,要在展示的时候不乱码,在不对数据库取出的数据转换的情况下,就需要发送header的时候设置编码为GBK,输出的文件(html、tpl等)都必须是GBK的,看看下面这个图会更清楚点:

DB(GBK) => php等(编码格式不限但如果代码文件中有汉字,文件就要是gbk编码或者在汉字输出的时候转化为gbk) => header(GBK)  => html、tpl(GBK)

或者还有一种方式只在出库的时候在代码中将utf8转化为gbk,总的来说utf8还是更流行点,问题更少点

DB(GBK) => php等(utf8,并将从数据库取出的数据转化为utf8) => header(utf8) => html、tpl(utf8)

只要按照上面这两种规范编码格式,就不会出现乱码情况,起码我测试的第一种方式是没问题的,所以我猜第二种也ok,好了,现在就来写一个转换文件编码格式的小脚本:

#!/usr/bin/python
# -*- coding: utf-8 -*-
#Filename:changeEncode.py
import os
import sys

def ChangeEncode(file,fromEncode,toEncode):
  try:
    f=open(file)
    s=f.read()
    f.close()
    u=s.decode(fromEncode)
    s=u.encode(toEncode)
    f=open(file,"w");
    f.write(s)
    return 0;
  except:
    return -1;

def Do(dirname,fromEncode,toEncode):
  for root,dirs,files in os.walk(dirname):
    for _file in files:
      _file=os.path.join(root,_file)
      if(ChangeEncode(_file,fromEncode,toEncode)!=0):
        print "[转换失败:]"+_file
      else:
        print "[成功:]"+_file

def CheckParam(dirname,fromEncode,toEncode):
  encode=["UTF-8","GBK","gbk","utf-8"]
  if(not fromEncode in encode or not toEncode in encode):
    return 2
  if(fromEncode==toEncode):
    return 3
  if(not os.path.isdir(dirname)):
    return 1
  return 0

if __name__=="__main__":
  error={1:"第一个参数不是一个有效的文件夹",3:"源编码和目标编码相同",2:"您要转化的编码不再范围之内:UTF-8,GBK"}
  dirname=sys.argv[1]
  fromEncode=sys.argv[2]
  toEncode=sys.argv[3]
  ret=CheckParam(dirname,fromEncode,toEncode)
  if(ret!=0):
    print error[ret]
  else:
    Do(dirname,fromEncode,toEncode)

脚本很简单,使用也很简单

./changeEncode.py target_dir fromEncode toEncode

这里要注意下,几种常见编码的关系:

us-ascii编码是utf-8编码的一个子集,这个是从stackoverflow上得到的,原文如下ASCII is a subset of UTF-8, so all ASCII files are already UTF-8 encoded,

我试了下确实是的,在不加汉字的时候显示编码为us-ascii,加了汉字之后,变为utf-8。

还有就是ASNI编码格式,这代表是本地编码格式,比如说在简体中文操作系统下,ASNI编码就代表GBK编码,这点还需要注意

还有一点就是一个在linux下查看文件编码格式的命令是:

file -i *

可以看到文件的编码格式。

当然了,上面的可能有些文件中有特殊字符,处理的时候会失败,但一般程序文件是没有问题的。

以上所述就是本文的全部内容了,希望大家能够喜欢。

Python 相关文章推荐
python socket多线程通讯实例分析(聊天室)
Apr 06 Python
Python内置函数OCT详解
Nov 09 Python
python解决汉字编码问题:Unicode Decode Error
Jan 19 Python
python发送告警邮件脚本
Sep 17 Python
python使用suds调用webservice接口的方法
Jan 03 Python
对PyQt5的输入对话框使用(QInputDialog)详解
Jun 25 Python
Django错误:TypeError at / 'bool' object is not callable解决
Aug 16 Python
python Dijkstra算法实现最短路径问题的方法
Sep 19 Python
使用python的turtle绘画滑稽脸实例
Nov 21 Python
python实现的Iou与Giou代码
Jan 18 Python
解决Pycharm的项目目录突然消失的问题
Jan 20 Python
python能做哪方面的工作
Jun 15 Python
python实现数独算法实例
Jun 09 #Python
python中的全局变量用法分析
Jun 09 #Python
python简单实现计算过期时间的方法
Jun 09 #Python
Python扫描IP段查看指定端口是否开放的方法
Jun 09 #Python
Python实现数据库编程方法详解
Jun 09 #Python
Python读写文件方法总结
Jun 09 #Python
六个窍门助你提高Python运行效率
Jun 09 #Python
You might like
PHP5.2下chunk_split()函数整数溢出漏洞 分析
2007/06/06 PHP
php array_unique之后json_encode需要注意
2011/01/02 PHP
php中异常处理方法小结
2015/01/09 PHP
ECSHOP在PHP5.5及高版本上报错的解决方法
2015/08/31 PHP
php版微信支付api.mch.weixin.qq.com域名解析慢原因与解决方法
2016/10/12 PHP
javascript 模拟点击广告
2010/01/02 Javascript
jquery 获取自定义属性(attr和prop)的实现代码
2012/06/27 Javascript
纯文字版返回顶端的js代码
2013/08/01 Javascript
使用mouse事件实现简单的鼠标经过特效
2015/01/30 Javascript
AngularJS基础 ng-cloak 指令简单示例
2016/08/01 Javascript
微信小程序 wxapp导航 navigator详解
2016/10/31 Javascript
JavaScript中Array对象用法实例总结
2016/11/29 Javascript
浅谈jQuery中的$.extend方法来扩展JSON对象
2017/02/12 Javascript
ie下js不执行的几种可能
2017/02/28 Javascript
nodejs连接mysql数据库简单封装示例-mysql模块
2017/04/10 NodeJs
Vuejs中使用markdown服务器端渲染的示例
2017/11/22 Javascript
jQuery pjax 应用简单示例
2018/09/20 jQuery
js作用域和作用域链及预解析
2019/04/11 Javascript
Vue 中 template 有且只能一个 root的原因解析(源码分析)
2020/04/11 Javascript
vue.js实现照片放大功能
2020/06/23 Javascript
python笔记(2)
2012/10/24 Python
在python的WEB框架Flask中使用多个配置文件的解决方法
2014/04/18 Python
Python实现简易过滤删除数字的方法小结
2019/01/09 Python
Python中请不要再用re.compile了
2019/06/30 Python
详解PyTorch手写数字识别(MNIST数据集)
2019/08/16 Python
python 进程的几种创建方式详解
2019/08/29 Python
Python3.7 pyodbc完美配置访问access数据库
2019/10/03 Python
浅谈PyQt5中异步刷新UI和Python多线程总结
2019/12/13 Python
世界排名第一的万圣节服装店:Spirit Halloween
2018/10/16 全球购物
结构工程个人自荐信范文
2013/11/30 职场文书
英语专业毕业生自荐信范文
2013/12/31 职场文书
社区学习十八大感想
2014/01/22 职场文书
贸易跟单员英文求职信
2014/04/19 职场文书
竞选班长的演讲稿
2014/04/24 职场文书
音乐之声音乐广播稿
2014/09/10 职场文书
郭明义观后感
2015/06/08 职场文书