代码之家  ›  专栏  ›  技术社区  ›  Jauder Ho

如何使用python删除扩展ascii?

  •  5
  • Jauder Ho  · 技术社区  · 15 年前

    import unicodedata, fileinput
    
    for line in fileinput.input():
        print unicodedata.normalize('NFKD', line).encode('ascii','ignore')
    

    \B1a\B \tintense, disordered and often destructive rage†.†.†.\t
    

    不太清楚如何正确地传递要在此时处理的行。

    4 回复  |  直到 15 年前
        1
  •  5
  •   Alex Martelli    15 年前

    尝试 print line.decode('iso-8859-1').encode('ascii', 'ignore') --这应该更接近你想要的。

        2
  •  4
  •   Paul Du Bois    15 年前

    line

    line.decode('ascii')

    这将导致实际上不是ASCII编码的数据出错。以下是如何忽略这些错误:

    line.decode('ascii', 'ignore') .

    unicode 实例。如果您希望使用(ascii编码的)数据而不是文本,您可以对其重新编码以返回一个 str bytes 实例(取决于您的Python版本):

    line.decode('ascii', 'ignore').encode('ascii')

        3
  •  2
  •   Denis Otkidach    15 年前

    line.decode(your_file_encoding).encode('ascii', 'ignore') . 但也许你最好使用PLM转义序列:

    import re
    
    def escape_unicode(m):
        return '\\U%04x' % ord(m.group())
    
    non_ascii = re.compile(u'[\x80-\uFFFF]', re.U)
    
    line = u'\\B1a\\B \\tintense, disordered and often destructive rage\u2020.\u2020.\u2020.\\t'
    print non_ascii.sub(escape_unicode, line)
    

    \B1a\B \tintense, disordered and often destructive rage\U2020.\U2020.\U2020.\t .

    用正则表达式删除非ASCII和控制字符也很容易(转义后可以安全使用):

    regexp = re.compile('[^\x09\x0A\x0D\x20-\x7F]')
    regexp.sub('', line)
    
        4
  •  0
  •   Laurence Gonsalves    15 年前

    在Python中读取文件时,会得到字节字符串,在python2.x和更早版本中称为“str”。您需要使用 decode

    line = line.decode('latin1')
    

    用正确的编码替换“latin1”。

    推荐文章