python - 使用python识别垃圾unicode字符串

标签 python python-2.7 python-unicode mojibake

我的脚本是从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

csv 输入:

"Name"
"袋è¢âdcx€¹Ã¤Â¸Å½Ã¦Å“‹å‹们çâ€ÂµÃ¥Â­Âå•â€"
"元大寶來證券"
"John Dove"

我想 defile 函数 is_valid_unicode_str() ,它将识别垃圾字符串并只处理有效字符串。

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

value.decode('utf8')

The expected output are string with Chinese and English string to be process

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

最佳答案

(此处为 ftfy 开发人员)

我发现文字很可能是'袋袋与 friend 们电子商'。我不得不猜测“友”、“子”和“商”这些字符,因为一些不可打印的字符是您问题中的字符串中缺少的字符。猜的时候,我从少量的可能性中挑选了最常见的字符。而且我不知道“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

关于python - 使用python识别垃圾unicode字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29071995/

相关文章:

python - Pygame 迷宫一直卡住

python - 从视频opencv python中计算红色对象

python - PIL : how to draw € on an image with draw. 文本?

python - 将结果从 python 写入 csv 文件 [UnicodeEncodeError : 'charmap' codec can't encode character

成员函数的 Python @precondition/@postcondition - 怎么样?

python - 如何让这个程序在 Python 中绘制 10 个椭圆?

python - Numpy.arrange 与日期时间 - ValueError : negative dimensions are not allowed:

python - 为什么 os.walk() 没有定义目录或文件?

python - 在不使用 np.tile() 或创建新向量的情况下将向量扩展 n 次以适应更大的矩阵

python - string.maketrans unicode 处理 : pypy vs CPython