Mac下文件编码修改问题

最近在使用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

插播:常用编码

  1. ASCII编码:用来表示英文,它使用1个字节表示,其中第一位规定为0,其他7位存储数据,一共可以表示128个字符。
  2. 拓展ASCII编码:用于表示更多的欧洲文字,用8个位存储数据,一共可以表示256个字符
  3. GBK/GB2312/GB18030:表示汉字。GBK/GB2312表示简体中文,GB18030表示繁体中文。
  4. Unicode编码:包含世界上所有的字符,是一个字符集。
  5. 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

猜你喜欢

转载自blog.csdn.net/alicelmx/article/details/79083774