【问题标题】:Removing unusual characters, after decoding and encoding解码和编码后去除异常字符
【发布时间】:2014-01-23 16:30:55
【问题描述】:

所以我一直在研究这个问题,到目前为止,我正在使用一个字符串并执行以下操作:

title = title.decode('windows-1252')
title = title.encode('utf-8','replace')

我的字符串如下,虽然可以有其他字符没有去掉。

Bus • Lorry • IT & Construction

标点已删除:

title = title.translate(string.punctuation)

这似乎变成了(删除标点符号后):

Bus • Lorry • IT Construction

虽然现在我遇到了一个问题,我将字符串拆分并尝试将其重新连接在一起。我将其拆分为:

['Bus', '\xc3\xa2\xe2\x82\xac\xc2\xa2', 'Lorry', '\xc3\xa2\xe2\x82\xac\xc2\xa2', 'IT', 'Construction']

作者: words = text.split(' ')

一旦我每个单词都删除了一些词干,就尝试重新加入:

text = ' '.join([stemmer.stem(word) for word in words])

然后,此时我遇到了一个问题:

'ascii' 编解码器无法解码位置 0 中的字节 0xc3:序数不在范围内(128)

但是我很困惑,因为阅读网站,我需要编码和解码,我认为我已经正确完成了......

【问题讨论】:

  • 您应该在unicode 中处理文本,稍后仅在输出之前处理,在utf8 中再次编码。你可以试试吗?
  • 另请注意,您实际上并没有删除标点符号,您只是将其重新编码为 utf8。
  • 我正在删除它:title = title.translate(string.punctuation) 我只是没有把那部分放在上面
  • 那些奇怪的角色到底是哪里来的?
  • 我的数据库 - 有一些部分包含带有项目符号的字符串

标签: python string list utf-8 replace


【解决方案1】:

您需要在输入数据后进行解码,将其用作 unicode,并将其编码仅用于输出。当某些东西试图在不知道原始编码的情况下将编码字符串转换为 unicode 对象时,会引发 UnicodeDecodeError

在您的情况下,我会尝试将词干分析器 before 编码为 UTF-8 并运行。这仅在输出或(可能)存储时需要。

【讨论】:

  • 我试过了,我做了:解码、删除 punct、词干、编码(按此顺序)。我现在遇到了删除标点符号的问题:title = title.translate(string.punctuation)。错误显示它不喜欢我移动编码的效果:翻译表必须是 256 个字符长
  • 来自 python 文档:“string.punctuation ASCII 字符串,在 C 语言环境中被视为标点字符。” -- 你的输入和输出都不是 ASCII,所以 string.punctuation 不适用
猜你喜欢
  • 2013-06-03
  • 1970-01-01
  • 1970-01-01
  • 2018-10-23
  • 1970-01-01
  • 2012-07-05
  • 1970-01-01
  • 1970-01-01
  • 2018-10-21
相关资源
最近更新 更多