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获得文件创建时间和修改时间的方法
Jun 30 Python
Python中集合的内建函数和内建方法学习教程
Aug 19 Python
python 循环遍历字典元素的简单方法
Sep 11 Python
教你用 Python 实现微信跳一跳(Mac+iOS版)
Jan 04 Python
python对矩阵进行转置的2种处理方法
Jul 17 Python
图文详解Django使用Pycharm连接MySQL数据库
Aug 09 Python
python 进程的几种创建方式详解
Aug 29 Python
Pytorch模型转onnx模型实例
Jan 15 Python
Pytorch上下采样函数--interpolate用法
Jul 07 Python
如何利用python之wxpy模块玩转微信
Aug 17 Python
Python random模块的使用示例
Oct 10 Python
django如何自定义manage.py管理命令
Apr 27 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
第十五节--Zend引擎的发展
2006/11/16 PHP
mysql 性能的检查和优化方法
2009/06/21 PHP
解析PHPExcel使用的常用说明以及把PHPExcel整合进CI框架的介绍
2013/06/24 PHP
浅谈ThinkPHP的URL重写
2014/11/25 PHP
Thinkphp5 如何隐藏入口文件index.php(URL重写)
2019/10/16 PHP
初学JavaScript_03(ExtJs Grid的简单使用)
2008/10/02 Javascript
WordPress 照片lightbox效果的运用几点
2009/06/22 Javascript
jquery关于图形报表的运用实现代码
2011/01/06 Javascript
由JavaScript中call()方法引发的对面向对象继承机制call的思考
2011/09/12 Javascript
jQuery学习笔记 操作jQuery对象 文档处理
2012/09/19 Javascript
js/jQuery对象互转(快速操作dom元素)
2013/02/04 Javascript
使用Java实现简单的server/client回显功能的方法介绍
2013/05/03 Javascript
javascript文件中引用依赖的js文件的方法
2014/03/17 Javascript
js分页工具实例
2015/01/28 Javascript
jQuery电话号码验证实例
2017/01/05 Javascript
vue.js实现价格格式化的方法
2017/05/23 Javascript
JS实现的自定义map方法示例
2019/05/17 Javascript
layer弹出层自适应高度,垂直水平居中的实现
2019/09/16 Javascript
Bootstrap table 实现树形表格联动选中联动取消功能
2019/09/30 Javascript
JS原型prototype和__proto__用法实例分析
2020/03/14 Javascript
js实现文章目录索引导航(table of content)
2020/05/10 Javascript
Python常见数据结构详解
2014/07/24 Python
CentOS 6.5下安装Python 3.5.2(与Python2并存)
2017/06/05 Python
解决pycharm修改代码后第一次运行不生效的问题
2021/02/06 Python
CSS3自定义滚动条样式的示例代码
2017/08/21 HTML / CSS
Tory Burch美国官方网站:美国时尚生活品牌
2016/08/01 全球购物
美国演唱会订票网站:Ticketmaster美国
2017/10/05 全球购物
微软瑞士官方网站:Microsoft瑞士
2018/04/20 全球购物
优秀员工表扬信
2014/01/17 职场文书
大学生学习2014年全国两会心得体会
2014/03/12 职场文书
事业单位分类改革实施方案
2014/03/21 职场文书
离职证明标准格式
2014/09/15 职场文书
2014年党员整改措施范文
2014/09/21 职场文书
警察正风肃纪剖析材料
2014/10/16 职场文书
新教师个人总结
2015/02/06 职场文书
农村党员干部承诺书
2015/05/04 职场文书