我收到以下内容:
value = ['\', 'n']
我转换为unicode
和调用ord
的常规例程会引发错误:
ord() expects a character, but string of length 2 found
如果len(value) > 2
,我似乎需要加入列表中的字符。
我该怎么做?
答案 0 :(得分:2)
如果您正在尝试弄清楚如何将其视为单个字符串'\\n'
,则可以根据某些规则将其解释为单个字符'\n'
,例如Python的unicode-escape规则,你必须在编码之前确定你想要的确切内容。
首先,要将两个单字符字符串的列表转换为一个双字符字符串,只需使用join
:
>>> value = ['\\', 'n']
>>> escaped_character = ''.join(value)
>>> escaped_character
'\\n'
接下来,要将双字符转义序列解释为单个字符,您必须知道要尝试撤消的转义规则。如果它是Python的Unicode转义,那么有一个名为unicode_escape
的编解码器可以做到这一点:
>>> character = escaped_character.decode('unicode_escape')
>>> character
u'\n'
另一方面,如果您尝试撤消UTF-8编码,然后是Python字符串转义,或C反斜杠转义,或者其他不同的东西,您显然必须编写不同的东西。鉴于你对UTF-8所说的话,我想你可能确实想要一些不同的东西。例如,u'é'.encode('UTF-8')
是双字节序列'\xce\xa9'
。只需在其上调用decode('unicode_escape')
即可获得双字符序列u'\u00c3\u00a9'
,这不是您想要的。
无论如何,既然你有一个角色,只需拨打ord
:
>>> char_ord = ord(character)
>>> char_ord
10
我不确定转换为unicode位是什么意思。如果这是Python 3.x,则字符串已经是Unicode。如果它是2.x,并且字符串是ASCII,则保证ord(s) == ord(unicode(s))
。如果它是2.x,并且字符串采用其他编码,只需在它们上面调用unicode
即可给你一个UnicodeError
或mojibake;你也需要传递一个编码,在这种情况下你也可以使用decode
方法。