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设置socket代理的方法
Jan 14 Python
Python中不同进制的语法及转换方法分析
Jul 27 Python
Python数据分析之双色球中蓝红球分析统计示例
Feb 03 Python
详解pytorch 0.4.0迁移指南
Jun 16 Python
python multiprocessing模块用法及原理介绍
Aug 20 Python
基于python进行抽样分布描述及实践详解
Sep 02 Python
python 字典套字典或列表的示例
Dec 16 Python
Python爬虫设置ip代理过程解析
Jul 20 Python
Python通过队列来实现进程间通信的示例
Oct 14 Python
Python模拟键盘输入自动登录TGP
Nov 27 Python
Python 用户输入和while循环的操作
May 23 Python
python神经网络学习 使用Keras进行简单分类
May 04 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
ThinkPHP实现ajax仿官网搜索功能实例
2014/12/02 PHP
php微信公众平台示例代码分析(二)
2016/12/06 PHP
php微信公众号开发之秒杀
2018/10/20 PHP
js获取url参数值的两种方式
2013/09/10 Javascript
解析img图片没找到onerror事件 Stack overflow at line: 0
2013/12/23 Javascript
js图片闪动特效可以控制间隔时间如几分钟闪动一下
2014/08/12 Javascript
jQuery淡入淡出元素让其效果更为生动
2014/09/01 Javascript
懒加载实现的分页&&网站footer自适应
2016/12/21 Javascript
jquery使用EasyUI Tree异步加载JSON数据(生成树)
2017/02/11 Javascript
angular ng-repeat数组中的数组实例
2017/02/18 Javascript
JQuery判断正整数整理小结
2017/08/21 jQuery
最基础的vue.js双向绑定操作
2017/08/23 Javascript
区别JavaScript函数声明与变量声明
2018/09/12 Javascript
vue实现一个炫酷的日历组件
2018/10/08 Javascript
简述vue路由打开一个新的窗口的方法
2018/11/29 Javascript
jquery图片预览插件实现方法详解
2019/07/18 jQuery
vue实现五子棋游戏
2020/05/28 Javascript
jQuery实现查看图片功能
2020/12/01 jQuery
Python 字典(Dictionary)操作详解
2014/03/11 Python
详解Python中表达式i += x与i = i + x是否等价
2017/02/08 Python
python编程使用selenium模拟登陆淘宝实例代码
2018/01/25 Python
python执行精确的小数计算方法
2019/01/21 Python
Python实现的大数据分析操作系统日志功能示例
2019/02/11 Python
python 列表转为字典的两个小方法(小结)
2019/06/28 Python
Python logging模块handlers用法详解
2020/08/14 Python
python中常用的数据结构介绍
2021/01/12 Python
HTML5手指下滑弹出负一屏阻止移动端浏览器内置下拉刷新功能的实现代码
2020/04/10 HTML / CSS
英国著名的化妆品折扣网站:Allbeauty.com
2016/07/21 全球购物
英国打印机墨水和碳粉商店:Printerinks
2017/06/30 全球购物
工商学院毕业生个人自我评价
2013/09/19 职场文书
村党支部公开承诺书
2014/05/29 职场文书
动物科学专业求职信
2014/07/27 职场文书
个人租房协议书样本
2014/10/01 职场文书
2015年度酒店客房部工作总结
2015/05/25 职场文书
2019年度政务公开考核工作总结模板
2019/11/11 职场文书
详解Flutter网络请求Dio库的使用及封装
2022/04/14 Java/Android