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基础入门详解(文件输入/输出 内建类型 字典操作使用方法)
Dec 08 Python
python采用getopt解析命令行输入参数实例
Sep 30 Python
Python实现的tab文件操作类分享
Nov 20 Python
Python的dict字典结构操作方法学习笔记
May 07 Python
定制FileField中的上传文件名称实例
Aug 23 Python
手把手教你python实现SVM算法
Dec 27 Python
python实现简单http服务器功能
Sep 17 Python
树莓派采用socket方式文件传输(python)
Jun 22 Python
解决Tensorboard可视化错误:不显示数据 No scalar data was found
Feb 15 Python
解决pycharm下pyuic工具使用的问题
Apr 08 Python
python中lower函数实现方法及用法讲解
Dec 23 Python
Python中requests库的用法详解
Jun 05 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
关于php fread()使用技巧
2010/01/22 PHP
yii2中的rules 自定义验证规则详解
2016/04/19 PHP
将PHP的session数据存储到数据库中的代码实例
2016/06/24 PHP
PHP调试及性能分析工具Xdebug详解
2017/02/09 PHP
一个可以兼容IE FF的加为首页与加入收藏实现代码
2009/11/02 Javascript
jQuery EasyUI 开源插件套装 完全替代ExtJS
2010/03/24 Javascript
Jquery下判断Id是否存在的代码
2011/01/06 Javascript
分享精心挑选的12款优秀jQuery Ajax分页插件和教程
2012/08/09 Javascript
JavaScript表单验证实例之验证表单项是否为空
2016/01/10 Javascript
巧方法 JavaScript获取超链接的绝对URL地址
2016/06/14 Javascript
AngularJS入门教程之XHR和依赖注入详解
2016/08/18 Javascript
Bootstrap Table从服务器加载数据进行显示的实现方法
2016/09/29 Javascript
jQuery中DOM节点的删除方法总结(超全面)
2017/01/22 Javascript
js阻止移动端页面滚动的两种方法
2017/01/25 Javascript
JavaScript关联数组用法分析【概念、定义、遍历】
2017/03/15 Javascript
easyui datagrid 表格中操作栏 按钮图标不显示的解决方法
2017/07/27 Javascript
vue获取input输入值的问题解决办法
2017/10/17 Javascript
JSON基本语法及与JavaScript的异同实例分析
2019/01/04 Javascript
深入了解如何基于Python读写Kafka
2019/12/31 Python
解决python DataFrame 打印结果不换行问题
2020/04/09 Python
django创建超级用户时指定添加其它字段方式
2020/05/14 Python
Python 实现3种回归模型(Linear Regression,Lasso,Ridge)的示例
2020/10/15 Python
如何用 Python 制作 GitHub 消息助手
2021/02/20 Python
初任培训自我鉴定
2013/10/07 职场文书
中英双版中文教师求职信
2013/10/27 职场文书
2014社区三八妇女节活动方案
2014/03/30 职场文书
食品采购员岗位职责
2014/04/14 职场文书
会计专业自荐信
2014/06/03 职场文书
应届生求职信范文
2014/06/30 职场文书
2014领导班子专题民主生活会对照检查材料思想汇报
2014/09/23 职场文书
离婚协议书该怎么写
2014/10/04 职场文书
群众路线查摆问题及整改措施
2014/10/10 职场文书
慰问信格式规范
2015/03/23 职场文书
Python办公自动化PPT批量转换操作
2021/09/15 Python
Win7/8.1用户可以免费升级到Windows 11系统吗?
2021/11/21 数码科技
Redis 操作多个数据库的配置的方法实现
2022/03/23 Redis