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 BeautifulSoup库抓取58手机维修信息
Nov 21 Python
python list使用示例 list中找连续的数字
Jan 27 Python
Python中处理时间的几种方法小结
Apr 09 Python
详解Python的Django框架中的中间件
Jul 24 Python
python中的编码知识整理汇总
Jan 26 Python
python模拟事件触发机制详解
Jan 19 Python
Python 删除连续出现的指定字符的实例
Jun 29 Python
Python2实现的图片文本识别功能详解
Jul 11 Python
Python 装饰器@,对函数进行功能扩展操作示例【开闭原则】
Oct 17 Python
Python Lambda函数使用总结详解
Dec 11 Python
django框架F&Q 聚合与分组操作示例
Dec 12 Python
Python实现上下文管理器的方法
Aug 07 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对现有搜索引擎的调用
2013/06/25 PHP
php生成excel列序号代码实例
2013/12/24 PHP
phpMyAdmin自动登录和取消自动登录的配置方法
2014/05/12 PHP
利用PHP实现开心消消乐的算法示例
2017/10/12 PHP
Yii框架自定义数据库操作组件示例
2019/11/11 PHP
JavaScript判断密码强度(自写代码)
2013/09/06 Javascript
jQuery中height()方法用法实例
2014/12/24 Javascript
jquery中ready()函数执行的时机和window的load事件比较
2015/06/22 Javascript
windows下安装nodejs及框架express
2015/08/07 NodeJs
完美的js图片轮换效果
2017/02/05 Javascript
微信小程序 商城开发(ecshop )简单实例
2017/04/07 Javascript
详解如何使用Node.js编写命令工具——以vue-cli为例
2017/06/29 Javascript
vue-router动态设置页面title的实例讲解
2018/08/30 Javascript
使用Element的InfiniteScroll 无限滚动组件报错的解决
2020/07/27 Javascript
JavaScript代码实现微博批量取消关注功能
2021/02/05 Javascript
Python Web服务器Tornado使用小结
2014/05/06 Python
python通过urllib2获取带有中文参数url内容的方法
2015/03/13 Python
Django ORM 查询管理器源码解析
2019/08/05 Python
通过celery异步处理一个查询任务的完整代码
2019/11/19 Python
Python3+selenium实现cookie免密登录的示例代码
2020/03/18 Python
更新升级python和pip版本后不生效的问题解决
2020/04/17 Python
Python Selenium异常处理的实例分析
2021/02/28 Python
Html5画布_动力节点Java学院整理
2017/07/13 HTML / CSS
HTML5 画布canvas使用方法
2016/03/18 HTML / CSS
阿迪达斯意大利在线商店:adidas意大利
2016/09/19 全球购物
中国网上药店领导者:1药网
2017/02/16 全球购物
仓管员岗位职责范文
2013/11/08 职场文书
《秋姑娘的信》教学反思
2014/02/28 职场文书
亲属关系公证书
2014/04/08 职场文书
小学评语大全
2014/04/22 职场文书
大学生村官座谈会发言材料
2014/05/25 职场文书
班子成员四风问题自我剖析材料
2014/09/29 职场文书
工作业绩不及格检讨书
2014/10/28 职场文书
党员教师学习党的群众路线教育实践活动心得体会
2014/10/31 职场文书
高中语文教材(文学文化常识大全一)
2019/08/13 职场文书
Python爬取奶茶店数据分析哪家最好喝以及性价比
2022/09/23 Python