时间:2021-05-22
需求:将utf-8格式的文件转换成gbk格式的文件
实现代码如下:
复制代码 代码如下:
def ReadFile(filePath,encoding="utf-8"):
with codecs.open(filePath,"r",encoding) as f:
return f.read()
def WriteFile(filePath,u,encoding="gbk"):
with codecs.open(filePath,"w",encoding) as f:
f.write(u)
def UTF8_2_GBK(src,dst):
content = ReadFile(src,encoding="utf-8")
WriteFile(dst,content,encoding="gbk")
代码讲解:
函数ReadFile的第二个参数指定以utf-8格式的编码方式读取文件,返回的结果content为Unicode然后,在将Unicode以gbk格式写入文件中。
这样就能实现需求。
但是,如果要转换格式的文件中包含有一些字符并不包含在gbk字符集中的话,就会报错,类似如下:
复制代码 代码如下:
UnicodeEncodeError: 'gbk' codec can't encode character u'\xa0' in position 4813: illegal multibyte sequence
以上的报错信息的意思是:在将Unicode编码成gbk的时候,不能将Unicode u'\xa0'编码成gbk。
这里,我们需要弄清楚gb2312、gbk和gb18030三者之间的关系
复制代码 代码如下:
GB2312:6763个汉字
GBK:21003个汉字
GB18030-2000:27533个汉字
GB18030-2005:70244个汉字
所以,GBK是GB2312的超集,GB18030是GBK的超集。
理清了关系之后,我们进一步改进下代码:
复制代码 代码如下:
def UTF8_2_GBK(src,dst):
content = ReadFile(src,encoding="utf-8")
WriteFile(dst,content,encoding="gb18030")
运行后,发现没有报错,可以正常运行。
因为,在GB18030字符集中,可以找到u'\xa0'对应的字符。
此外,还有另外一种实现方案:
需要修改下WriteFile方法
复制代码 代码如下:
def WriteFile(filePath,u,encoding="gbk"):
with codecs.open(filePath,"w") as f:
f.write(u.encode(encoding,errors="ignore"))
这里,我们将Unicode编码(encode)成gbk格式,但是注意encode函数的第二个参数,我们赋值"ignore",表示在编码的时候,忽略掉那些无法编码的字符,解码同理。
但是,当我们执行后,发现可以成功的将utf-8格式的文件修改成了ansi格式。但,另外发现生成的文件中,每个一行都有一行空行。
这里,可以指定以二进制流的形式写文件,修改后的代码如下:
复制代码 代码如下:
def WriteFile(filePath,u,encoding="gbk"):
with codecs.open(filePath,"wb") as f:
f.write(u.encode(encoding,errors="ignore"))
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
python3中str默认为Unicode的编码格式Unicode是一32位编码格式,不适合用来传输和存储,所以必须转换成utf-8,gbk等等所以在Pytho
故障描述:更新X3.420180101GBK版本后出现乱码问题解决:这个是因为最新版使用的ip库文件是utf8格式的,换成gbk版本的文件就好了
若是使用Java自带的压缩工具包来实现解压缩文件到指定文件夹的功能,因为jdk提供的zip只能按UTF-8格式处理,而Windows系统中文件名是以GBK方式编
怎样将f4v格式的视频文件转换成mp3格式的音频文件,在这里主要是将视频文件转换成音频文件,那么这种格式的转换又是如何进行转换的呢?下面我们就跟着小编来了解一下
UTF8==UnicodeTransformationFormat--8bit是Unicode传送格式。即把Unicode文件转换成BYTE的传送流。UTF8流