使用python识别垃圾unicode字符串

Sha*_*shi 3 python mojibake python-2.7 python-unicode

我的脚本是从csv文件中读取数据,csv文件可以有多个英语或非英语单词串.

有时候文本文件有垃圾字符串,我想识别那些字符串并跳过这些字符串并处理其他字符串

doc = codecs.open(input_text_file, "rb",'utf_8_sig')
fob = csv.DictReader(doc)
for row, entry in enumerate(f):
    if is_valid_unicode_str(row['Name']):
         process_futher

def is_valid_unicode_str(value):
     try:
         function
         return True
     except UnicodeEncodeError:
         return false
Run Code Online (Sandbox Code Playgroud)

csv输入:

"Name"
"袋è¢âdcx€¹Ã¤Â¸Å½Ã¦Å“‹å‹们çâ€ÂµÃ¥Â­Âå•â€"
"??????"
"John Dove"
Run Code Online (Sandbox Code Playgroud)

我想玷污函数is_valid_unicode_str(),它将识别垃圾字符串并仅处理有效字符串.

我尝试使用解码但是在解码垃圾字符串时它并没有失败

value.decode('utf8')
Run Code Online (Sandbox Code Playgroud)

预期的输出是带有中文和英文字符串的字符串

你能指导我如何实现过滤有效的Unicode文件的功能?

rsp*_*eer 6

(ftfy开发人员在这里)

我发现文字可能是"袋袋与朋友们电子商".我不得不猜测人物友,子和商,因为一些不可打印的字符是你问题中字符串中缺少的字符.在猜测时,我从少数几种可能性中选择了最常见的角色.我不知道"dcx"在哪里或为什么会在那里.

谷歌翻译在这里不是很有帮助,但它似乎意味着电子商务.

所以这是你的文字发生的一切:

  1. 它被编码为UTF-8并且被错误地解码为sloppy-windows-1252,两次
  2. 它在UTF-8序列的中间插入了字母"dcx"
  3. windows-1252中不存在的字符 - 字节值为81,8d,8f,90和9d - 已被删除
  4. 从末尾删除了一个不间断的空格(字节值a0)

如果刚出现第一个问题,ftfy.fix_text_encoding就能解决它.当你试图将字符串放到Stack Overflow上时,剩下的问题可能就发生了.

所以这是我的建议:

  • 找出谁不正确地将数据解码为sloppy-windows-1252,并让他们将其解码为UTF-8.
  • 如果你最终再次使用这样的字符串,请尝试ftfy.fix_text_encoding它.