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之入门(四)运算
May 27 Python
Python使用MD5加密字符串示例
Aug 22 Python
python文件操作之目录遍历实例分析
May 20 Python
图文讲解选择排序算法的原理及在Python中的实现
May 04 Python
fastcgi文件读取漏洞之python扫描脚本
Apr 23 Python
Python+matplotlib+numpy绘制精美的条形统计图
Jan 02 Python
基于Python socket的端口扫描程序实例代码
Feb 09 Python
Python基于Logistic回归建模计算某银行在降低贷款拖欠率的数据示例
Jan 23 Python
python selenium 弹出框处理的实现
Feb 26 Python
Python实现网页截图(PyQT5)过程解析
Aug 12 Python
Tensorflow 卷积的梯度反向传播过程
Feb 10 Python
python中使用paramiko模块并实现远程连接服务器执行上传下载功能
Feb 29 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 include加载文件两种方式效率比较
2010/08/08 PHP
php数组函数序列之array_key_exists() - 查找数组键名是否存在
2011/10/29 PHP
解析strtr函数的效率问题
2013/06/26 PHP
php中自定义函数dump查看数组信息类似var_dump
2014/01/27 PHP
采用ThinkPHP中F方法实现快速缓存实例
2014/06/13 PHP
php从csv文件读取数据并输出到网页的方法
2015/03/14 PHP
thinkPHP模型初始化实例分析
2015/12/03 PHP
WAF的正确bypass
2017/01/05 PHP
PHP使用finfo_file()函数检测上传图片类型的实现方法
2017/04/18 PHP
php实现解析xml并生成sql语句的方法
2018/02/03 PHP
prototype 的说明 js类
2006/09/07 Javascript
javaScript parseInt字符转化为数字函数使用小结
2009/11/05 Javascript
javascript 事件绑定问题
2011/01/01 Javascript
表单切换,用回车键替换Tab健(不支持IE)
2011/07/20 Javascript
自定义的一个简单时尚js下拉选择框
2013/11/20 Javascript
js字符串操作方法实例分析
2015/05/06 Javascript
jQuery validate插件submitHandler提交导致死循环解决方法
2016/01/21 Javascript
深入浅析JS是按值传递还是按引用传递(推荐)
2016/09/18 Javascript
完美解决jQuery fancybox ie 无法显示关闭按钮的问题
2016/11/29 Javascript
AngularJS实现的输入框字数限制提醒功能示例
2017/10/26 Javascript
JS写XSS cookie stealer来窃取密码的步骤详解
2017/11/20 Javascript
JS实现快递单打印功能【推荐】
2018/06/21 Javascript
JavaScript中数组去重的5种方法
2020/07/04 Javascript
python的类方法和静态方法
2014/12/13 Python
python统计文本文件内单词数量的方法
2015/05/30 Python
Django基础三之视图函数的使用方法
2019/07/18 Python
python模拟鼠标点击和键盘输入的操作
2019/08/04 Python
Python爬虫简单运用爬取代理IP的实现
2020/12/01 Python
日本高端护肤品牌:Tatcha
2016/08/29 全球购物
一份Java笔试题
2012/02/21 面试题
工商管理专业毕业生求职信
2014/05/26 职场文书
新疆民族团结演讲稿
2014/08/27 职场文书
公司股份合作协议书
2014/12/07 职场文书
小学运动会通讯稿
2015/07/18 职场文书
诺贝尔奖获得者名言100句:句句启人心智,值永久收藏
2019/08/09 职场文书
Python基础之操作MySQL数据库
2021/05/06 Python