将 unicode \xe9 转换为 (python 2.7)

Transform unicode \xe9 to é (python 2.7)

我正在尝试转换此 unicode 值:

string_value = u'd\xe9cid\xe9'

string_value = u'décidé'

我觉得我什么都试过了:

decoded_str = string_value.decode('utf-8')

string_value = str(string_value)
decoded_str = string_value.encode('latin1').decode('utf-8')

string_value = string_value.decode('latin-1')

这个结果是:

d\xc3\xa9cid\xc3\xa9

如果我这样做,我会得到相同的结果:

string_value = string_value.encode('utf-8')

我读过: How do I convert 'blah \xe9 blah' to 'blah é blah'

也来自: Why does Python print unicode characters when the default encoding is ASCII?

和: How do I convert a unicode to a string at the Python level?

编辑:

我的问题是我需要使用数据,我的意思是如果我有:

string_value = u'mai 2017 \u2013 Aujourd\u2019hui'

即:

mai 2017 – Aujourd’hui

我想做:

string_list = string_value.split('-')

但结果是:

[u'mai 2017 \u2013 Aujourd\u2019hui']

我会:

['mai 2017', 'Aujourd’hui']

新编辑:

多亏了你的回答,我明白我走错了方向。 \xe9 是 'é' 的正确表示,这不是问题。 我真正的问题是为什么 json.loads() 将 'mai 2017 – Aujourd’hui' 转换为 'mai 2017 \u2013 Aujourd\u2019hui' ?

我不确定你在问什么:\xe9 是代码点 233(十六进制的 e9)的表示,which simply is the letter "é":

>>> u'é' == u'\xe9'
True

您的困惑可能源于 Python 字符串的 repr 是(在 Python 2 中)ASCII,因此 non-ASCII 字符被转义。 Python 控制台显示一个使用 repr 的值,如果你没有明确地 print 它:

>>> print(repr(u'é'))
u'\xe9'

>>> print(repr(u'\xe9'))
u'\xe9'

但是,当您打印该值时,转换不会发生并且一切都按预期进行:

>>> print(u'é')
é

>>> print(u'\xe9')
é

另请注意,在 Python 3 中,repr returns Unicode:

Python 3.5.2 (default, Nov 23 2017, 16:37:01) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print(repr(u'\xe9'))
'é'

问题编辑后更新:

正如评论中指出的那样,\u2013- 不是同一个字符(就像 ab 是不同的字符一样)。所以你需要在 \u2013 上拆分,而不是在 -.

上拆分

所以...

print string_value.split(u"\u2013")