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中的list列表及其切片和迭代操作
Mar 13 Python
Python实现将一个大文件按段落分隔为多个小文件的简单操作方法
Apr 17 Python
Python实现改变与矩形橡胶的线条的颜色代码示例
Jan 05 Python
python机器学习理论与实战(五)支持向量机
Jan 19 Python
python中利用h5py模块读取h5文件中的主键方法
Jun 05 Python
使用pandas对两个dataframe进行join的实例
Jun 08 Python
python在html中插入简单的代码并加上时间戳的方法
Oct 16 Python
django使用django-apscheduler 实现定时任务的例子
Jul 20 Python
Django框架序列化与反序列化操作详解
Nov 01 Python
Python3和pyqt5实现控件数据动态显示方式
Dec 13 Python
OpenCV+Python3.5 简易手势识别的实现
Dec 21 Python
用python监控服务器的cpu,磁盘空间,内存,超过邮件报警
Jan 29 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中date()得出的时间为什么不是当前时间的解决方法
2008/06/30 PHP
解析htaccess伪静态的规则
2013/06/18 PHP
php+ajax实现仿百度查询下拉内容功能示例
2017/10/20 PHP
PHP PDOStatement::nextRowset讲解
2019/02/01 PHP
广告显示判断
2006/08/31 Javascript
css图片自适应大小
2007/11/28 Javascript
ExtJS 2.2.1的grid控件在ie6中的显示问题
2009/05/04 Javascript
asp.net HttpHandler实现图片防盗链
2009/11/09 Javascript
JavaScript中数组的排序、乱序和搜索实现代码
2011/11/30 Javascript
分享一道笔试题[有n个直线最多可以把一个平面分成多少个部分]
2012/10/12 Javascript
JS 添加网页桌面快捷方式的代码详细整理
2012/12/27 Javascript
jQuery之自动完成组件的深入解析
2013/06/19 Javascript
JavaScript:Array类型全面解析
2016/05/19 Javascript
详细探究ES6之Proxy代理
2016/07/22 Javascript
老生常谈JQuery data方法的使用
2016/09/09 Javascript
IE8兼容Jquery.validate.js的问题
2016/12/01 Javascript
AngularJS定时器的使用与移除操作方法【interval与timeout】
2016/12/14 Javascript
Vue键盘事件用法总结
2017/04/18 Javascript
ES6模块化的import和export用法方法总结
2017/08/08 Javascript
webpack中如何加载静态文件的方法步骤
2019/05/18 Javascript
JavaScript实现简单的图片切换功能(实例代码)
2020/04/10 Javascript
[00:21]DOTA2亚洲邀请赛 Logo演绎
2015/02/07 DOTA
python发布模块的步骤分享
2014/02/21 Python
python实现的简单文本类游戏实例
2015/04/28 Python
使用Python的SymPy库解决数学运算问题的方法
2019/03/27 Python
Django项目使用CircleCI的方法示例
2019/07/14 Python
python 单线程和异步协程工作方式解析
2019/09/28 Python
css3 background属性调整增强介绍
2010/12/18 HTML / CSS
Pure Collection美国官网:来自英国羊绒专家的奢华羊绒
2017/11/19 全球购物
Nili Lotan官网:Nili Lotan同名品牌
2018/01/07 全球购物
《雨霖铃》教学反思
2014/02/22 职场文书
社区母亲节活动记录
2014/03/06 职场文书
五年级学生评语
2014/04/22 职场文书
专题组织生活会发言材料
2014/10/17 职场文书
质量负责人岗位职责
2015/02/15 职场文书
2019年朋友圈经典励志语录50条
2019/07/05 职场文书