python轻松实现代码编码格式转换


Posted in Python onMarch 26, 2015

最近刚换工作不久,没太多的时间去整理工作中的东西,大部分时间都在用来熟悉新公司的业务,熟悉他们的代码框架了,最主要的是还有很多新东西要学,我之前主要是做php后台开发的,来这边之后还要把我半路出家的前端学好、还要学习C++,哈哈,总之很充实了,每天下班回家都可以睡的很香(一句话总结,就是吃得香、睡的香~)。再说说换工作时候吧,今年年初正式毕业半年了,感觉自己技术增长很快,原公司里面程序员的地位还不如运营,所以想换个工作,面试了3家(2家大的、一家小的),都给offer了,当然从大公司里面挑了个各方面综合(工资、干什么、交通等等)还不错的,反正感觉就很顺利的进来了(比毕业的时候容易多了),哈哈,越努力、越幸运,越幸运、越努力!。从这周开始,继续整理博客,免得给自己造成懒得习惯。

刚来这个公司,熟悉了环境,老大就开始让我做一个迁移、修改代码的工作,我想说的是,这种工作真没劲~~,看别人的代码、改别人的代码、这里改个变量、那里改个文件名······,都是些没技术含量、很繁琐的事情,不过通过迁移代码顺便熟悉下环境也好。扯了这么多,说说今天的主题吧——代码编码格式改变,由于某些原因,需要将代码从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 相关文章推荐
python thread 并发且顺序运行示例
Apr 09 Python
python时间整形转标准格式的示例分享
Feb 14 Python
浅谈python socket函数中,send与sendall的区别与使用方法
May 09 Python
python 垃圾收集机制的实例详解
Aug 20 Python
Python编程实现粒子群算法(PSO)详解
Nov 13 Python
使用pandas read_table读取csv文件的方法
Jul 04 Python
python正则爬取某段子网站前20页段子(request库)过程解析
Aug 10 Python
PyTorch的Optimizer训练工具的实现
Aug 18 Python
Python爬虫:将headers请求头字符串转为字典的方法
Aug 21 Python
python GUI框架pyqt5 对图片进行流式布局的方法(瀑布流flowlayout)
Mar 12 Python
python简单实现最大似然估计&scipy库的使用详解
Apr 15 Python
使用Python解决图表与画布的间距问题
Apr 11 Python
使用python实现正则匹配检索远端FTP目录下的文件
Mar 25 #Python
python通过wxPython打开一个音频文件并播放的方法
Mar 25 #Python
python概率计算器实例分析
Mar 25 #Python
python编写的最短路径算法
Mar 25 #Python
python实现挑选出来100以内的质数
Mar 24 #Python
Python 的 Socket 编程
Mar 24 #Python
python获取标准北京时间的方法
Mar 24 #Python
You might like
php面向对象全攻略 (十六) 对象的串行化
2009/09/30 PHP
PHP MemCached高级缓存配置图文教程
2010/08/05 PHP
PHP中改变图片的尺寸大小的代码
2011/07/17 PHP
PHP获取真实客户端的真实IP
2017/03/07 PHP
向大师们学习Javascript(视频与PPT)
2009/12/27 Javascript
JavaScript 编写匿名函数的几种方法
2010/02/21 Javascript
javascript整除实现代码
2010/11/23 Javascript
javascript用函数实现对象的方法
2015/05/14 Javascript
JavaScript中浅讲ajax图文详解
2016/11/11 Javascript
bootstrap组件之按钮式下拉菜单小结
2017/01/19 Javascript
vue轮播图插件vue-awesome-swiper
2017/11/27 Javascript
Vue项目使用CDN优化首屏加载问题
2018/04/01 Javascript
vue基于两个计算属性实现选中和全选功能示例
2019/02/08 Javascript
vue父子组件通信的高级用法示例
2019/08/29 Javascript
Node.js 实现抢票小工具 & 短信通知提醒功能
2019/10/22 Javascript
微信小程序 wx.getUserInfo引导用户授权问题实例分析
2020/03/09 Javascript
在漏洞利用Python代码真的很爽
2007/08/26 Python
python解析文件示例
2014/01/23 Python
单利模式及python实现方式详解
2018/03/20 Python
pandas.loc 选取指定列进行操作的实例
2018/05/18 Python
使用CodeMirror实现Python3在线编辑器的示例代码
2019/01/14 Python
使用pytorch和torchtext进行文本分类的实例
2020/01/08 Python
python利用platform模块获取系统信息
2020/10/09 Python
利用CSS3实现文本框的清除按钮相关的一些效果
2015/06/23 HTML / CSS
基础的CSS3弹性盒Flexbox布局使用实例
2016/04/08 HTML / CSS
KOHLER科勒美国官网:国际著名卫浴橱柜领先品牌
2020/06/27 全球购物
精细化工应届生求职信
2013/11/17 职场文书
最经典的大学生职业生涯规划范文
2014/03/05 职场文书
会计学专业求职信
2014/07/17 职场文书
税务干部群众路线教育实践活动对照检查材料
2014/09/20 职场文书
爱心捐款活动总结
2015/05/09 职场文书
关于践行三严三实的心得体会
2016/01/05 职场文书
MySQL慢查询的坑
2021/04/28 MySQL
python字典的元素访问实例详解
2021/07/21 Python
Windows Server 2019 配置远程控制以及管理方法
2022/04/28 Servers
如何利用python实现列表嵌套字典取值
2022/06/10 Python