对于那些经常在日常工作中处理统一码文件(也适用于其他编码)的人来说,这篇文章是必读的。对于自然语言处理的从业者,处理统一码文件是一场噩梦,尤其是使用Windows操作系统。想象一下,当在编码或解码过程中遇到错误时的沮丧,例如:
- UnicodeEncodeError: 'mbcs' codec can't decode characters in
- positionUnicodeDecodeError: 'charmap' codec can't decode byte 0x90 in position
大多数时候,除非是这个领域经验丰富的人,否则这样的错误并不能提供足够的信息。你可能会问为什么需要对字符进行编码和解码。我们可以从对统一码的简单解释来回答这个问题。
基于官方python文档,统一码Unicode (通用编码字符集)是一种规范,旨在列出人类语言使用的每个字符,并为每个字符提供各自独特的代码。统一码规范不断被修订和更新,以添加新的语言和符号。
因此,编码和解码是一种将字符从文本映射到字节的方法,反之亦然。这使得它们可在计算机之间传输,并在日常生活中使用。当拥有不同的操作系统集时,情况会更复杂。
此外,不同语言有各自的字符集,只能在特定字体下显示。简单而言,可以看作是将一个外文字符翻译成机器能理解的字符。本文将探讨一些可以用于处理Python中统一码文件的方法,从可用模式和标准编码来入手。
统一码联盟的官方标志
通过上下文管理器读写文件
打开文件最安全的方法是通过上下文管理器使用with语句。它将自动关闭文件,防止任何可能出现的问题。
- with open('name.txt') as f:
- f.readlines()
默认模式是'rt' ,即读取和发送文件。可以使用以下代码编写:
- with open('name.txt', 'w') as f:
- f.write('Hello world!')
上面的代码将改写并截断文件。在一些情况下,可能更喜欢使用模式 'a'而不是'w'。以下列表显示了可用的完整模式:
可以组合一些模式。如原始文档中所述(https://docs.python.org/3.5/library/functions.html#open),对于二进制读写访问,模式'w+b' 打开并将文件截断为0字节。'r+b' 打开文件不会截断。
Python中的标准编码
在Python中指定编码,只需在上下文管理器初始化期间传入另一个参数。无论何时读写统一码字符,都需要指定它。以下例子显示了将统一码文本添加到现有文件的正确方法:
- with open('name.txt', 'a', encoding='utf8') as f:
- f.write('你好!')
如果不确定使用哪种编码,只需输入 utf8并检查是否有误。大多情况下,UTF-8对于编码和解码字符已经够好了。然而在某些情况下,需要使用不同的编码。
更多关于可用编码的信息:
https://docs.python.org/3.7/library/codecs.html#standard-encodings
如果不知道文件中使用的什么编码该怎么办?一起进入下一部分来了解更多。
通过Notepad++检查编码类型
一般会更倾向使用Notepad++来查看文件内容。如果使用Notepad++打开一个文件,可以在用户界面的右下角看到使用的编码类型。
一个使用UTF-8编码的示例文件
可以通过编码菜单修改编码,它接受大量最常用的编码。
单击编码菜单时显示下拉菜单的图像
如果曾遇到过无法将文件转换为另一种编码的问题,或者即使正确地指定了某些编码,也无法读取,那么可以尝试以下方法。虽然有点笨,但亲测有效。
大多数情况下,这将自动将所有字符转换为新的编码。请注意,如果不能根据新的编码转换字符,可能会造成数据丢失。
处理未知编码中的字符
如果遇到无法识别编码且字符未知的情况,可以尝试修改错误参数来解决这个问题:
- with open('name.txt', 'r', encoding='utf8', errors='ignore') as f:
- f.readlines()
错误参数指的是如何处理编码和解码错误。请注意,此参数不能在二进制模式中使用。可用错误的处理程序有:
在命令提示符中显示统一码字符
如果在Windows操作系统中运行命令提示符,那么在大多数情况下显示统一码字符都会有问题,出现如下图所示的乱码字符:
显示乱码字符的命令提示符
为了解决这个问题,需要将设置更改为正确的字体。
命令提示符的字体属性
打开一个有统一码字符的文件路径——通过pandas模块适用于read_csv
这部分有点棘手,尤其是在使用某些特定Python模块(如pandas)时。假设有以下非英语的文件路径:
- file_path = 'C:\path\to\数据分析\data.csv'
试图通过read_csv读取文件将会抛出错误,因为文件路径包含统一码字符。在Python中使用内置的open()函数不是问题所在。为了解决这个问题,需要先打开文件,然后传递给read_csv函数:
- with open(file_path, 'r', encoding='utf-8') as f:
- df = pd.read_csv(f, encoding='utf-8')
当前名称:处理统一码文件是场噩梦?这些诀窍助你大梦初醒
标题链接:http://www.mswzjz.cn/qtweb/news25/323125.html
攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能