utf-8文件转为ansi文件 python实现

1. 编码方式

编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。
不同编码的文本,是根据文本的前两个字节来定义其编码格式的,定义如下:

ANSI: 无格式定义;
Unicode: 前两个字节为FFFE;
Unicode big endian: 前两字节为FEFF;
UTF-8: 前两字节为EFBB;
这样通过前面两个字节就可以判定出文件的具体格式了。
实现文件的转换!直接贴代码,一看就明白了!

# UTF-8文件转 ANSI
#coding:utf-8

import chardet
import codecs

file_path1 = "1.txt"
file_path2 = "2.txt"
# 查看文件编码方式..............................................................

f1=open(file_path1,'r')
data1=f1.read()
print (chardet.detect(data1))
f1.close()

#读入utf-8.....................................................................

f1 = codecs.open(file_path1, 'r')
data1 = f1.read()
print data1

#创建ansi文件..................................................................

fh = codecs.open(file_path2,'w', 'GBK')
fh.write(data1.split('\xbf',1)[1].decode('utf8'))
#反复试验发现读入的内容中包含了\xef\xbb\xbf,应该是所读文件头的信息,导致在后面写入时无法识别
#所以把前面分开就好了

#str_str=u'abcd1234中文'
#fh.write(str_str)
#fh.write(u'中文')
fh.close()
f1.close()

写入字符串都可以,就是在写入从文件读出来的数据时出错!

文本格式对应表

ANSI---->GBK

UTF-8---->UTF-8

Unicode---->UTF-16

#!/usr/bin/env python
#coding:utf-8


#保存unicode格式
fh = codecs.open("xxx.txt","w","utf-16")
fh.write(str_str.decode("utf-8"))
fh.close()

#保存ANSI格式
fh = codecs.open("xxx.txt","w","GBK")
fh.write(str_str.decode("utf-8"))
fh.close()

#保存utf-8格式
fh = codecs.open("xxx.txt","w","UTF-8")
fh.write(str_str.decode("utf-8"))
fh.close()

#这里默认文本格式是utf-8,编码是utf-8

文件读写模式

见下表,其中模式就是指获取文件对象时传入的参数,最常用的是前三个。

模式描述
r仅读,待打开的文件必须存在
w仅写,若文件已存在,内容将先被清空
a仅写,若文件已存在,内容不会清空
r+读写,待打开的文件必须存在
w+读写,若文件已存在,内容将先被清空
a+读写,若文件已存在,内容不会清空
rb仅读,二进制,待打开的文件必须存在
wb仅写,二进制,若文件已存在,内容将先被清空
ab仅写,二进制,若文件已存在,内容不会清空
r+b读写,二进制,待打开的文件必须存在
w+b读写,二进制,若文件已存在,内容将先被清空
a+b读写,二进制,若文件已存在,内容不会清空

版权声明:本文为H_____H原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。