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中的yield浅析
Jun 16 Python
python定时检查某个进程是否已经关闭的方法
May 20 Python
Python 正则表达式的高级用法
Dec 04 Python
在VS Code上搭建Python开发环境的方法
Apr 06 Python
python3读取csv和xlsx文件的实例
Jun 22 Python
对python指数、幂数拟合curve_fit详解
Dec 29 Python
python导入坐标点的具体操作
May 10 Python
基于Python的Post请求数据爬取的方法详解
Jun 14 Python
Python目录和文件处理总结详解
Sep 02 Python
python3 字符串知识点学习笔记
Feb 08 Python
Python通过4种方式实现进程数据通信
Mar 12 Python
动态设置django的model field的默认值操作步骤
Mar 30 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
简单示例AJAX结合PHP代码实现登录效果代码
2008/07/25 PHP
php class中self,parent,this的区别以及实例介绍
2013/04/24 PHP
php使用Jpgraph绘制饼状图的方法
2015/06/10 PHP
Javascript 面向对象 重载
2010/05/13 Javascript
js异常捕获方法介绍
2013/04/10 Javascript
利用js实现前台动态添加文本框,后台获取文本框内容(示例代码)
2013/11/25 Javascript
JavaScript函数定义的常见注意事项小结
2014/09/16 Javascript
js使用onmousemove和onmouseout获取鼠标坐标的方法
2015/03/31 Javascript
Ajax+FormData+javascript实现无刷新表单信息提交
2016/10/24 Javascript
js控制按钮,防止频繁点击响应的实例
2017/02/15 Javascript
Javascript实现时间倒计时效果
2017/07/15 Javascript
微信小程序实现图片预览功能
2018/01/31 Javascript
layui内置模块layim发送图片添加加载动画的方法
2019/09/23 Javascript
Python getopt模块处理命令行选项实例
2014/05/13 Python
Python os模块中的isfile()和isdir()函数均返回false问题解决方法
2015/02/04 Python
Python实现计算文件夹下.h和.cpp文件的总行数
2015/04/23 Python
Python 列表排序方法reverse、sort、sorted详解
2016/01/22 Python
对Python3之方法的覆盖与super函数详解
2019/06/26 Python
python模式 工厂模式原理及实例详解
2020/02/11 Python
使用Keras训练好的.h5模型来测试一个实例
2020/07/06 Python
Python常用模块函数代码汇总解析
2020/08/31 Python
lululemon美国官网:瑜伽服+跑步装备
2018/11/16 全球购物
工程预算与管理应届生求职信
2013/10/06 职场文书
建筑系毕业生自我鉴定
2014/01/24 职场文书
求职意向书范文
2014/04/01 职场文书
做一个有道德的人演讲稿
2014/05/14 职场文书
酒店开业策划方案
2014/06/02 职场文书
软件工程毕业生自荐信
2014/07/04 职场文书
学校安全教育月活动总结
2014/07/07 职场文书
2014年党委工作总结
2014/11/22 职场文书
2014年幼儿园德育工作总结
2014/12/17 职场文书
学习经验交流会策划书
2015/11/02 职场文书
班组长如何制订适合本班组的工作计划?
2019/07/10 职场文书
社交电商模式的兴起:这些新的商机千万别错过
2019/07/26 职场文书
JS一分钟在github+Jekyll的博客中添加访问量功能的实现
2021/04/03 Javascript
python中24小时制转换为12小时制的方法
2021/06/18 Python