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的爬虫程序编写框架Scrapy入门学习教程
Jul 02 Python
详解Python的Lambda函数与排序
Oct 25 Python
使用Python中的tkinter模块作图的方法
Feb 07 Python
flask使用session保存登录状态及拦截未登录请求代码
Jan 19 Python
python3+PyQt5泛型委托详解
Apr 24 Python
Python嵌套列表转一维的方法(压平嵌套列表)
Jul 03 Python
在python中将字符串转为json对象并取值的方法
Dec 31 Python
11个Python Pandas小技巧让你的工作更高效(附代码实例)
Apr 30 Python
Pycharm激活码激活两种快速方式(附最新激活码和插件)
Mar 12 Python
Tensorflow安装问题: Could not find a version that satisfies the requirement tensorflow
Apr 20 Python
教你用Python matplotlib库制作简单的动画
Jun 11 Python
Python爬取用户观影数据并分析用户与电影之间的隐藏信息!
Jun 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数组去除空值函数分享
2015/02/02 PHP
php类的定义与继承用法实例
2015/07/07 PHP
简介WordPress中用于获取首页和站点链接的PHP函数
2015/12/17 PHP
关于PHP中interface的用处详解
2020/07/26 PHP
jquery BS,dialog控件自适应大小
2009/07/06 Javascript
jquery 新手学习常见问题解决方法
2010/04/18 Javascript
jQuery性能优化技巧分析
2015/02/20 Javascript
javascript实现控制浏览器全屏
2015/03/30 Javascript
在javascript中创建对象的各种模式解析
2016/05/16 Javascript
JS判断form内所有表单是否为空的简单实例
2016/09/09 Javascript
从零开始学习Node.js系列教程六:EventEmitter发送和接收事件的方法示例
2017/04/13 Javascript
详解Webpack DLL用法以及功能
2017/07/11 Javascript
Mongoose实现虚拟字段查询的方法详解
2017/08/15 Javascript
web前端开发中常见的多列布局解决方案整理(一定要看)
2017/10/15 Javascript
浅谈如何通过node.js对数据进行MD5加密
2018/05/16 Javascript
vue单文件组件lint error自动fix与styleLint报错自动fix详解
2019/01/08 Javascript
解决layui 三级联动下拉框更新时回显的问题
2019/09/03 Javascript
p5.js临摹旋转爱心
2019/10/23 Javascript
Javascript数组及类数组相关原理详解
2020/10/29 Javascript
[03:26]《DAC最前线》之EG经理自述DOTA2经历
2015/02/02 DOTA
使用Python脚本将Bing的每日图片作为桌面的教程
2015/05/04 Python
Django的分页器实例(paginator)
2017/12/01 Python
致Python初学者 Anaconda入门使用指南完整版
2018/04/05 Python
tensorflow1.0学习之模型的保存与恢复(Saver)
2018/04/23 Python
解决py2exe打包后,总是多显示一个DOS黑色窗口的问题
2019/06/21 Python
python多线程并发及测试框架案例
2019/10/15 Python
浅谈python多线程和多线程变量共享问题介绍
2020/04/17 Python
固特异美国在线轮胎店:Goodyear Tire
2019/02/23 全球购物
社区七一党员活动方案
2014/01/25 职场文书
美术教师自我鉴定
2014/02/12 职场文书
高一学生期末评语
2014/04/25 职场文书
大学生标准自荐书
2014/06/15 职场文书
老人节标语大全
2014/10/08 职场文书
个人作风建设剖析材料
2014/10/11 职场文书
2015年安全生产目标责任书
2015/01/29 职场文书
党风廉政承诺书2016
2016/03/25 职场文书