python中的代码编码格式转换问题
作者:hebedich 发布时间:2022-02-26 02:05:02
刚来这个公司,熟悉了环境,老大就开始让我做一个迁移、修改代码的工作,我想说的是,这种工作真没劲~~,看别人的代码、改别人的代码、这里改个变量、那里改个文件名······,都是些没技术含量、很繁琐的事情,不过通过迁移代码顺便熟悉下环境也好。扯了这么多,说说今天的主题吧——代码编码格式改变,由于某些原因,需要将代码从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 *
可以看到文件的编码格式。
当然了,上面的可能有些文件中有特殊字符,处理的时候会失败,但一般程序文件是没有问题的。
以上所述就是本文的全部内容了,希望大家能够喜欢。


猜你喜欢
- 关于scapyScapy 是一个可以让用户发送、侦听和解析并伪装网络报文的Python程序。这些功能可以用于制作侦测、扫描和攻击网络的工具。
- <%Class Cls_TemplateDim RegDim PageDim CIDDim SIDDim RuleDim Conten
- function gaga(obj){ // 值允许输入一个小数点和数字 obj.value = obj.value.replace(/[^
- 处理数据的时候,偶然遇到要把一个Dataframe中的某些行添加至一个空白的Dataframe中的问题。最先想到的方法是创建Datafram
- 1.相信大家,在经过前面的初步学习之后,相信大家也想要有一个舒适的编程环境了。接下来将交给大家一个简单的配置环境Anaconda + VSC
- drop_duplicates为我们提供了数据去重的方法,那怎么得到哪些数据有重复呢?实现步骤:1、采用drop_duplicates对数据
- 关于维卷积的理解功能一维卷积一般用于处理文本数据,常用语自然语言处理中,输入一般是文本经过embedding的二维数据。定义tf.layer
- python升级到2.7.13函数执行的结尾加上这个即可for x in locals().keys(): del locals
- 父组件 <interval-number :number-content="blockHeight" v-if=&
- python3版本的Scapy--Scapy3k来实现一个简单的DDos。首先实现SYN泛洪攻击(SYN Flood,是一直常用的DOS方式
- python实现简单的情感分析1 数据导入及预处理1.1 数据导入# 数据导入import pandas as pddata =
- 本文实例为大家分享了python openCV实现摄像头获取人脸图片的具体代码,供大家参考,具体内容如下在机器学习中,训练模型需要大量图片,
- 问题:将文件夹a下任意命名的10个文件修改为如下图所示文件?代码:#coding:utf-8import ospath = "./
- 在MySQL数据库中导出整个数据库:1.导出整个数据库mysqldump -u 用户名 -p 数据库名 > 导出的文件名mysqldu
- 使用go语言的第三方包:github.com/pkg/sftp和golang.org/x/crypto/ssh实现文件和文件夹传输。1、创建
- 引题:该题源自一个网友的求助,作为水群龙王的我义不容辞的接下了这道题目,先来看题目:拿到这道题,题目的意思已经很清楚了,列表里含有2的元素都
- 前言vue.js的UI组件库,在git上有多个项目,我见的使用者比较多的是iView和Element.两个组件库,组件都很丰富。官网的介绍i
- 上周想要取得iframe中的元素和js变量值,一直没取得,查资料得知:不能用$(document).ready()方法,而是要用$(&quo
- 1. 目标通过hadoop hive或spark等数据计算框架完成数据清洗后的数据在HDFS上爬虫和机器学习在Python中容易实现在Lin
- find()方法判断字符串str,如果起始索引beg和结束end索引能找到在字符串或字符串的一个子串中。语法以下是find()方