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读写,二进制,若文件已存在,内容不会清空
  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值