0

我收到以下信息:

value = ['\', 'n']

我的常规转换unicode和调用程序ord会引发错误:

ord() expects a character, but string of length 2 found

看来我需要加入列表中的字符 if len(value) > 2

我该怎么做呢?

4

1 回答 1

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方法。

于 2013-09-06T23:46:04.350 回答