Python 如何将字符串列表转换为unicode值?

Python 如何将字符串列表转换为unicode值?,python,unicode,encoding,Python,Unicode,Encoding,我收到以下消息: value = ['\', 'n'] 我经常转换为unicode并调用ord时会抛出错误: ord() expects a character, but string of length 2 found 如果len(value)>2,我似乎需要在列表中加入字符 如何执行此操作?如果您试图找出如何将其视为单个字符串'\\n',然后可以根据一些规则(如Python的unicode转义规则)将其解释为单个字符'\n',则您必须在编码之前准确地确定所需内容 首先,要将两个单字符字符

我收到以下消息:

value = ['\', 'n']
我经常转换为unicode并调用ord时会抛出错误:

ord() expects a character, but string of length 2 found
如果
len(value)>2
,我似乎需要在列表中加入字符


如何执行此操作?

如果您试图找出如何将其视为单个字符串
'\\n'
,然后可以根据一些规则(如Python的unicode转义规则)将其解释为单个字符
'\n'
,则您必须在编码之前准确地确定所需内容

首先,要将两个单字符字符串的列表转换为一个双字符字符串,只需使用
join

>>> value = ['\\', 'n']
>>> escaped_character = ''.join(value)
>>> escaped_character
'\\n'
接下来,要将两个字符的转义序列解释为单个字符,您必须知道要撤消哪些转义规则。如果是Python的Unicode escape,那么有一个名为
Unicode\u escape
的编解码器可以做到这一点:

>>> character = escaped_character.decode('unicode_escape')
>>> character
u'\n'
另一方面,如果您试图撤消UTF-8编码,然后执行Python字符串转义、C反斜杠转义或其他操作,那么显然您必须编写不同的操作。考虑到你所说的UTF-8,我认为你可能想要一些不同的东西。例如,
u'é.encode('UTF-8')
是两字节序列
'\xce\xa9'
。只要在上面调用
decode('unicode\u escape')
,就会得到两个字符的序列
u'\u00c3\u00a9'
,这不是您想要的

不管怎样,现在您已经有了一个字符,只需调用
ord

>>> char_ord = ord(character)
>>> char_ord
10


我不确定转换为unicode位是关于什么的。如果这是Python3.x,则字符串已经是Unicode。如果是2.x,并且字符串是ASCII,则保证
ord(s)==ord(unicode(s))
。如果是2.x,并且字符串采用其他编码,只需对其调用
unicode
,就会得到一个
UnicodeError
或mojibake;您还需要传入一个编码,在这种情况下,您最好使用
解码
方法。

请参见以下答案:重复:您能告诉我们“我的常规程序”是什么样子吗?因为按照您所描述的操作,
unicode(value)
,将得到11个字符的字符串,而不是2个字符的字符串。(事实上,它甚至没有走那么远,因为如果你试图输入
value=['\','n']
line…),你会得到一个
SyntaxError
。@PhillipCloud:我不这么认为。大概他的“常规程序”是这个问题的答案之一,而他的问题超出了我还没有解决的范围。除了向我们展示不起作用的代码外,请向我们展示
value
的实际内容(也就是说,如果你
打印它,复制并粘贴你得到的内容),抱歉,我的问题可能不是很清楚(而且我对编码的了解也可能不是很透彻)。我的目标是将字符“\n”转换为其UTF-8代码点,并从那里将其转换为二进制/十进制。@sdadas:首先,在您的示例中,字符“\n”
来自何处?其次,在UTF-8中,单个字符可以是1-6字节,因此“其UTF-8代码点”毫无意义。如果你有一个UTF-8字符串,你想得到每个字节的数值,只需在每个字节上调用
ord
;无需转换为Unicode字符串,除非您希望获取字节解码为的Unicode字符的数值。字符“\n”来自一个解析器,该解析器返回字符串“
”\n“
'.join(…)
的代码解决了我最初想问的问题,因此我感谢您。我想在解析器中实现UTF-8支持,出于某种原因,我愚蠢地假设代码点用0填充。“可变宽度编码”这个术语现在对我来说更有意义了…
'.join(['\\','\n'])
并没有给你一个字符串
'\n'
,而是给你两个字符串
'\\n'
。如果要将其解析为
'\n'
,则需要显式地执行此操作(例如,使用
unicode_escape
准编解码器…如果这是数据的适当规则)。@sdadas:同时,解析器是否会给您一个单字节UTF-8可能是部分字符串的列表,或者单个字符,可能是多字节UTF-8字符串,或者…?在你知道你拥有什么之前,你不知道如何处理它。