Python unicode:如何将不能使用utf8解码的字符替换为空格?

Deh*_*gYe 5 python unicode utf-8

如何将不能使用utf8解码的字符替换为空白?

# -*- coding: utf-8 -*-
print unicode('\x97', errors='ignore') # print out nothing
print unicode('ABC\x97abc', errors='ignore') # print out ABCabc
Run Code Online (Sandbox Code Playgroud)

我该如何打印ABC abc而不是打印ABCabc?注意,\x97这只是一个示例字符。无法解码的字符是未知输入。

  • 如果使用errors='ignore',它将不会打印任何内容。
  • 如果使用errors='replace',它将用一些特殊字符替换该字符。

Hel*_*rld 5

看一看codecs.register_error。您可以使用它来注册自定义错误处理程序

https://docs.python.org/2/library/codecs.html#codecs.register_error

import codecs
codecs.register_error('replace_with_space', lambda e: (u' ',e.start + 1))
print unicode('ABC\x97abc', encoding='utf-8', errors='replace_with_space')
Run Code Online (Sandbox Code Playgroud)


Kas*_*mvd 3

您可以使用try-except语句来处理UnicodeDecodeError

def my_encoder(my_string):
   for i in my_string:
      try :
         yield unicode(i)
      except UnicodeDecodeError:
         yield '\t' #or another whietespaces 
Run Code Online (Sandbox Code Playgroud)

然后使用str.join方法加入你的字符串:

print ''.join(my_encoder(my_string))
Run Code Online (Sandbox Code Playgroud)

演示:

>>> print ''.join(my_encoder('this is a\x97n exam\x97ple'))
this is a   n exam  ple
Run Code Online (Sandbox Code Playgroud)