zoukankan      html  css  js  c++  java
  • python 读不同编码的文本,传递一个可选的encoding 参数给open() 函数

    文件的读写操作默认使用系统编码,可以通过调用sys.getdefaultencoding() 来得到。在大多数机器上面都是utf-8 编码。如果你已经知道你要读写的文本是其他编码方式,那么可以通过传递一个可选的encoding 参数给open() 函数。如下所示:
    with open('somefile.txt', 'rt', encoding='latin-1') as f:
    ...
    Python 支持非常多的文本编码。几个常见的编码是ascii, latin-1, utf-8 和utf-16。在web 应用程序中通常都使用的是UTF-8。ascii 对应从U+0000 到U+007F 范围内的7 位字符。latin-1 是字节0-255 到U+0000 至U+00FF 范围内Unicode 字符的直接映射。当读取一个未知编码的文本时使用latin-1 编码永远不会产生解码错误。使用latin-1 编码读取一个文件的时候也许不能产生完全正确的文本解码数据,但是它也能从中提取出足够多的有用数据。同时,如果你之后将数据回写回去,原先的数据还是会保留的。

    是文本文件中可能出现的编码错误。但你读取或者写入一个文本文件时,你可能会遇到一个编码或者解码错误

    >>> f = open('sample.txt', 'rt', encoding='ascii')
    >>> f.read()
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "/usr/local/lib/python3.3/encodings/ascii.py", line 26, in decode
    return codecs.ascii_decode(input, self.errors)[0]
    UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position
    12: ordinal
    

     如果出现这个错误,通常表示你读取文本时指定的编码不正确。你最好仔细阅读说明并确认你的文件编码是正确的(比如使用UTF-8 而不是Latin-1 编码或其他)。如果编码错误还是存在的话,你可以给open() 函数传递一个可选的errors 参数来处理这些错误。下面是一些处理常见错误的方法:

    >>> f = open('sample.txt', 'rt', encoding='ascii', errors='replace')
    >>> f.read()
    'Spicy Jalape?o!'
    >>> # Ignore bad chars entirely
    >>> g = open('sample.txt', 'rt', encoding='ascii', errors='ignore')
    >>> g.read()
    'Spicy Jalapeo!'
    >>>
    

     如果你经常使用errors 参数来处理编码错误,可能会让你的生活变得很糟糕。对于文本处理的首要原则是确保你总是使用的是正确编码。当模棱两可的时候,就使用默认的设置(通常都是UTF-8)。

  • 相关阅读:
    linux 遇到(vsftpd)—500 OOPS:chroot
    linux中配置JAVA环境
    win主机ping不通linux的IP
    java:递归算法
    MySQL数据库中字段类型为tinyint,读取出来为true/false的问题
    Mybaitis-generator生成数据对象和时间的优化
    IntelliJ IDEA 2017.1.6 x64 的破解
    在eclipse中maven构建Web项目,tomcat插件在maven中的运用
    Maven 的聚合
    理解面向对象
  • 原文地址:https://www.cnblogs.com/baxianhua/p/10189664.html
Copyright © 2011-2022 走看看