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获取豆瓣电影简介代码分享
Jan 16 Python
Python利用前序和中序遍历结果重建二叉树的方法
Apr 27 Python
详解Golang 与python中的字符串反转
Jul 21 Python
Python使用pyh生成HTML文档的方法示例
Mar 10 Python
Python3实现购物车功能
Apr 18 Python
numpy中以文本的方式存储以及读取数据方法
Jun 04 Python
Python列表推导式与生成器用法分析
Aug 02 Python
Python零基础入门学习之输入与输出
Apr 03 Python
对PyQt5的输入对话框使用(QInputDialog)详解
Jun 25 Python
python数据处理之如何选取csv文件中某几行的数据
Sep 02 Python
Python 串口通信的实现
Sep 29 Python
Python绘制K线图之可视化神器pyecharts的使用
Mar 02 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+dojo 的数据库保存拖动布局的一个方法dojo 这里下载
2007/03/07 PHP
php 多个submit提交表单 处理方法
2009/07/07 PHP
PHP实现单条sql执行多个数据的insert语句方法
2019/10/11 PHP
用方法封装javascript的new操作符(一)
2010/12/25 Javascript
仅IE6/7/8中innerHTML返回值忽略英文空格的问题
2011/04/07 Javascript
JS 在指定数组中随机取出N个不重复的数据
2014/06/10 Javascript
原生JavaScript编写canvas版的连连看游戏
2016/05/29 Javascript
jQuery实现级联下拉框实战(5)
2017/02/08 Javascript
Javascript实现页面滚动时导航智能定位
2017/05/06 Javascript
jQuery实现在HTML文档加载完毕后自动执行某个事件的方法
2017/05/08 jQuery
基于Vue的SPA动态修改页面title的方法(推荐)
2018/01/02 Javascript
JavaScript 有用的代码片段和 trick
2018/02/22 Javascript
微信小程序实现上传图片功能
2018/05/28 Javascript
vue更改数组中的值实例代码详解
2020/02/07 Javascript
在js文件中引入(调用)另一个js文件的三种方法
2020/09/11 Javascript
返回上一个url并刷新界面的js代码
2020/09/12 Javascript
如何在JavaScript中等分数组的实现
2020/12/13 Javascript
[01:17]Ti4 循环赛第一日回顾
2014/07/11 DOTA
Python与Java间Socket通信实例代码
2017/03/06 Python
利用OpenCV和Python实现查找图片差异
2019/12/19 Python
python实现单张图像拼接与批量图片拼接
2020/03/23 Python
matplotlib绘制鼠标的十字光标的实现(自定义方式,官方实例)
2021/01/10 Python
用HTML5实现手机摇一摇的功能的教程
2012/10/30 HTML / CSS
浅谈关于html5中图片抛物线运动的一些心得
2018/01/09 HTML / CSS
惠普美国官方商店:HP Official Store
2016/08/28 全球购物
终端业务员岗位职责
2013/11/27 职场文书
关于母亲节的感言
2014/02/04 职场文书
犯错检讨书
2014/02/21 职场文书
办公室主任竞聘演讲稿
2014/05/15 职场文书
环境日宣传活动总结
2014/07/09 职场文书
幼儿园心得体会范文
2016/01/21 职场文书
2019年手机市场的调研报告2篇
2019/10/10 职场文书
如何用JavaScipt测网速
2021/05/09 Javascript
navicat 连接Ubuntu虚拟机的mysql的操作方法
2022/04/02 MySQL
Win11运行育碧游戏总是崩溃怎么办 win11玩育碧游戏出现性能崩溃的解决办法
2022/04/06 数码科技
MySQL聚簇索引和非聚簇索引的区别详情
2022/06/14 MySQL