将\ u200e解码为字符串

时间:2018-08-12 21:48:47

标签: python string python-3.x datetime

在Python3中,我收到以下错误消息:

ValueError: time data '\u200e07-30-200702:38 PM' does not match format '%m-%d-%Y%I:%M %p'

from datetime import datetime

dateRegistered = '\u200e07-30-200702:38 PM'
# dateRegistered = '07-30-200702:38 PM'
dateRegistered = datetime.strptime(dateRegistered, '%m-%d-%Y%I:%M %p')
print (dateRegistered)

上面的代码用于复制问题。如果我取消注释该行,它将起作用。我接收的字符串似乎已编码,但是我无法确定它使用的编码。还是我的字符串中有non-printable character

print ('\u200e07-30-200702:38 PM')
>>>> 07-30-200702:38 PM

1 个答案:

答案 0 :(得分:1)

您的输入中包含U+200E LEFT-TO-RIGHT MARK字符。这是non-printing typesetting directive,指示正在显示文本的所有内容切换到从左到右的模式。该字符串在打印到已经设置为从左到右显示的控制台(例如西方世界的绝大多数终端)时,看起来与没有标记的打印字符串没有什么不同。

由于它不是日期的一部分,因此您可以剥离此类字符

datetime.strptime(dateRegistered.strip('\u200e'), '%m-%d-%Y%I:%M %p')

或(如果始终存在)将其显式添加到您要解析的格式中,就像-:空格字符已成为您的格式的一部分一样:

datetime.strptime(dateRegistered, '\u200e%m-%d-%Y%I:%M %p')

演示:

>>> from datetime import datetime
>>> dateRegistered = '\u200e07-30-200702:38 PM'
>>> datetime.strptime(dateRegistered.strip('\u200e'), '%m-%d-%Y%I:%M %p')
datetime.datetime(2007, 7, 30, 14, 38)
>>> datetime.strptime(dateRegistered, '\u200e%m-%d-%Y%I:%M %p')
datetime.datetime(2007, 7, 30, 14, 38)