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实现Youku视频批量下载功能
Mar 14 Python
Python3.6 Schedule模块定时任务(实例讲解)
Nov 09 Python
Python如何快速上手? 快速掌握一门新语言的方法
Nov 14 Python
CentOS7.3编译安装Python3.6.2的方法
Jan 22 Python
Python判断字符串是否为字母或者数字(浮点数)的多种方法
Aug 03 Python
Python socket实现的简单通信功能示例
Aug 21 Python
python selenium实现发送带附件的邮件代码实例
Dec 10 Python
python deque模块简单使用代码实例
Mar 12 Python
python中读入二维csv格式的表格方法详解(以元组/列表形式表示)
Apr 24 Python
利用Vscode进行Python开发环境配置的步骤
Jun 22 Python
使用Python的开发框架Brownie部署以太坊智能合约
May 28 Python
python 使用pandas读取csv文件的方法
Dec 24 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创建PDF中文文档
2006/10/09 PHP
php数字转汉字代码(算法)
2011/10/08 PHP
CodeIgniter框架中_remap()使用方法2例
2014/03/10 PHP
php利用header函数下载各种文件
2016/08/24 PHP
PHP实现的DES加密解密类定义与用法示例
2020/11/02 PHP
PHP批斗大会之缺失的异常详解
2019/07/09 PHP
PHP正则之正向预查与反向预查讲解与实例
2020/04/06 PHP
JavaScript异步编程:异步数据收集的具体方法
2013/08/19 Javascript
IE与FireFox的JavaScript兼容问题解决办法
2013/12/31 Javascript
nodejs读取memcache示例分享
2014/01/02 NodeJs
text-align:justify实现文本两端对齐 兼容IE
2015/08/19 Javascript
JS+CSS实现类似QQ好友及黑名单效果的树型菜单
2015/09/22 Javascript
laypage分页控件使用实例详解
2016/05/19 Javascript
微信小程序 特效菜单抽屉效果实例代码
2017/01/11 Javascript
JavaScript生成图形验证码
2020/08/24 Javascript
详解Angular操作cookies方法
2018/06/01 Javascript
Vue2.0点击切换类名改变样式的方法
2018/08/22 Javascript
JavaScript实现图片放大镜效果
2019/06/27 Javascript
layui table 列宽百分比显示的实现方法
2019/09/28 Javascript
jQuery实现form表单基于ajax无刷新提交方法实例代码
2019/11/04 jQuery
json_decode 索引为数字时自动排序问题解决方法
2020/03/28 Javascript
ES6 async、await的基本使用方法示例
2020/06/06 Javascript
在vue中实现清除echarts上次保留的数据(亲测有效)
2020/09/09 Javascript
Python中的集合类型知识讲解
2015/08/19 Python
Python数据结构之翻转链表
2017/02/25 Python
Python实现针对中文排序的方法
2017/05/09 Python
python编程使用selenium模拟登陆淘宝实例代码
2018/01/25 Python
python实战教程之自动扫雷
2018/07/13 Python
python使用正则表达式来获取文件名的前缀方法
2018/10/21 Python
如何基于python实现年会抽奖工具
2020/10/20 Python
jupyter notebook快速入门及使用详解
2020/11/13 Python
BeautifulSoup中find和find_all的使用详解
2020/12/07 Python
咖啡店的创业计划书,让你hold不住
2014/01/03 职场文书
离婚撤诉申请书范本
2015/05/18 职场文书
2015年小学校长工作总结
2015/05/19 职场文书
三好学生主要事迹怎么写
2015/11/03 职场文书