您的位置:首页 > 编程语言 > Python开发

Mac下文件编码修改问题

2018-01-17 12:03 162 查看
最近在使用python3做NLP中文文本分类时,遇到如下非常恼人的问题,一开始没有在意,后来忍无可忍弄了一天。

UnicodeDecodeError: 'utf8' codec can't decode byte 0xcc in position 468: invalid continuation byte


分析原因

原代码段

with open(filename,"r",encoding='utf-8') as f:
content = f.read()


主要原因

和下载的搜狗语料库本身的编码有关系,本身编码是ASCII码,而我们需要以UTF-8来读取,这就超出python3的能力了就会报错。

如何查看编码

有很多命令可以用于查看,比如enca还有万能的VIM,但是我比较喜欢使用file命令,如下显示的是UTF-8格式的。

$ file Chinesestopword.txt
Chinesestopword.txt: UTF-8 Unicode text


插播:常用编码

ASCII编码:用来表示英文,它使用1个字节表示,其中第一位规定为0,其他7位存储数据,一共可以表示128个字符。

拓展ASCII编码:用于表示更多的欧洲文字,用8个位存储数据,一共可以表示256个字符

GBK/GB2312/GB18030:表示汉字。GBK/GB2312表示简体中文,GB18030表示繁体中文。

Unicode编码:包含世界上所有的字符,是一个字符集。

UTF-8:是Unicode字符的实现方式之一,它使用1-4个字符表示一个符号,根据不同的符号而变化字节长度。

解决办法

说出来这个解决办法,不知道是因为我电脑的原因,还是我电脑的原因,折腾了好久好久,以下提供几个方法,供大家参考,此时此刻感叹win有win系统的好啊!

win系统下暴力解决

一个小小的记事本居然能完成Mac完不成的任务,用了这个方法,我的Mac坟头草都好几米了,方法见下图:文件->另存为



看见下边这个编码了吗,他可以轻松实现编码转换,转化完还没有乱码,唯一的缺点就是需要手动解决,小数量的还可以,数量较大的时候还是选择下面这个方法吧~

使用命令工具

在Vim中直接进行转换文件编码,比如将一个文件转换成utf-8格式

:set fileencoding=utf-8


enconv 转换文件编码,比如要将一个GBK编码的文件转换成UTF-8编码,操作如下

enconv -L zh_CN -x UTF-8 filename


iconv 转换,iconv的命令格式如下:

iconv -f encoding -t encoding inputfile
iconv -f UTF-8 -t GBK file1 -o file2 #将一个UTF-8 编码的文件转换成GBK编码


更好的傻瓜型命令行工具enca

它不但能智能的识别文件的编码,而且还支持成批转换。

Mac下安装

brew install enca


检查文件编码

enca -L zh_CN ip.txt
Simplified Chinese National Standard; GB2312


转换文件编码

$enca -L 当前语言 -x 目标编码 文件名


-L zh_CN 一般也可以不用指定。

批量转换

enca -x utf-8 *


总结

做数据挖掘的人绝不轻易低头,可能最近太偏执了,浪费了两天,其实只要换个思路,这台电脑不行,换个win试试也许许多问题都迎刃而解,学习做项目还是需要灵活一些~

以上这种方法,我最后成功的只有第一种,无奈,以后在解决吧~

对编码终于有了初步了解了哈哈,已经比以前淡定多了,出了问题不久解决吗,哈哈哈哈哈

多谢

https://segmentfault.com/a/1190000007073776?_ea=1252426

http://blog.csdn.net/csywwx2008/article/details/17137097
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  编码 数据 python3
相关文章推荐