【问题标题】:Invisible unicode characters loaded to DB in python在 python 中将不可见的 unicode 字符加载到 DB
【发布时间】:2016-09-29 07:56:37
【问题描述】:

对此有很多问题和修复,但似乎没有一个对我有用。 我的问题是我正在读取一个带有字符串的文件并将每一行加载到数据库中。

在文件中它看起来像普通文本,而在 DB 中它被读取为 unicode 空间。我尝试将其替换为空格和类似选项,但均未奏效。

例如在文本文件中,字符串如下:

The abrupt departure

插入数据库后,如下图:

The abrupt departure

当我尝试对数据库中的数据运行查询时,它看起来像:

"The abrupt\xc2\xa0departure"

我尝试了以下方法:

if "\xc2\xa0"  in str: 
     str.replace('\xa0', ' ')
     str.replace('\xc2', ' ')
     print str

上面的代码正在打印这样的字符串:

The abrupt departure

但在插入回数据库时,它仍然是一样的。

感谢任何帮助。

【问题讨论】:

  • str.replace() 不对字符串做任何事情。

标签: python mysql string unicode replace


【解决方案1】:

试试这个:

这将删除Unicode 字符

>>> s = "The abrupt departure"
>>> s = s.decode('unicode_escape').encode('ascii','ignore')
>>> s
'The abrupt departure'

或者, 您可以尝试使用替换。但是您忘记重新分配给同一个变量。

>>> s = "The abrupt departure"
>>> s = s.replace('\xc2', '').replace('\xa0','')
>>> s
'The abrupt departure'

【讨论】:

  • 这行得通,但我得到了它就像 The abruptdeparture 没有中间的空间。
  • 你使用的是哪个python版本?
  • 2.7有关系吗?
  • 它的读法不是像“突然离开”,而是像这样“突然\xc2\xa0departure”
【解决方案2】:

重点是字符串是不可变的,需要从replace赋值返回值:

 s = s.replace('\xa0', ' ')
 s = s.replace('\xc2', ' ')

另外,不要使用str 作为变量名。

【讨论】:

    【解决方案3】:

    C2A0 是“无间断空间”。 'Â ' 是您在 CHARATER SET 设置不一致时看到的内容。

    replace() 只是掩盖问题,当另一个有趣的角色出现在你的桌子上时并没有帮助。

    由于您没有提供足够的信息来说明您所做的正确与错误,让我为您指出两个参考:

    【讨论】:

      猜你喜欢
      • 2016-02-29
      • 1970-01-01
      • 2021-12-18
      • 1970-01-01
      • 2011-04-08
      • 1970-01-01
      • 2016-04-12
      • 2017-11-19
      • 1970-01-01
      相关资源
      最近更新 更多