Python的utf-8转换成unicode再写入文本

转换很好转,就直接是

text.decode('utf-8')

之前import chardet,

chardet.detect(text)

看一下原本是什么格式,原本的是utf-8-sig,就用这个decode。

 

问题是写入的时候出现了问题,一直会出现

UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 20: ordinal not in range(128)

类似这样的错误,去问了Song才知道utf-16就是unicode???然后是带BOM的,而且还要以'wb'写入,于是我回去直接用utf-16encode就好了……

open(filename,'wb').write(newText.encode('utf-16'))

此外不知道为啥,在terminal里可以直接运行,写在py里就会报错???虽然结果还是改成了unicode???陷入沉思……

 1 import os
 2 
 3 def convert(filename):
 4     raw = open(filename,'r').read() 6     newRaw = raw.decode('utf-8-sig')
 7     raw = open(filename,'wb').write(newRaw.encode('utf-16'))
 8     raw.close()11 
12 
13 def main():
14     fileDir = ""
15     for root,dirs, files in os.walk(fileDir):
16         for file in files:
17             convert(os.path.join(root, file))
18     os.system("pause")
19 
20 if __name__ == '__main__':
21     main()

 

转载于:https://www.cnblogs.com/shadowhu/p/6553726.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值