【问题标题】:How do I convert a list of strings to a unicode value? [duplicate]如何将字符串列表转换为 unicode 值? [复制]
【发布时间】:2013-09-11 03:54:22
【问题描述】:

我收到以下信息:

value = ['\', 'n']

而我转换为unicode 并调用ord 的常规例程会引发错误:

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

如果len(value) > 2,我似乎需要加入列表中的字符。

我该怎么做?

【问题讨论】:

  • 看到这个答案:stackoverflow.com/a/7291240/564538
  • 你能告诉我们“我的常规”是什么样的吗?因为按照你的描述,unicode(value),给你一个 11 个字符的字符串,而不是 2 个。(实际上,它甚至没有那么远,因为你会从尝试输入 value = ['\', 'n'] 得到一个 SyntaxError线…)
  • @PhillipCloud:我不这么认为。大概他的“例行公事”就是那个问题的答案之一,而他的问题超出了我尚未弄清楚的范围。
  • 除了给我们看不起作用的代码之外,请给我们看value的实际内容(即复制粘贴print得到的内容),以及您希望的输出。

标签: python unicode encoding


【解决方案1】:

如果您想弄清楚如何将其视为单个字符串 '\\n',然后可以根据某些规则(例如 Python 的 unicode-escape 规则)将其解释为单个字符 '\n',您有在编写代码之前确定你想要什么。

首先,要将两个单字符串的列表变成一个双字符串,只需使用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 方法。

【讨论】:

  • 对不起,我的问题可能不是很清楚(而且我对编码的了解也可能不是很好)。我的目标是将字符 '\n' 转换为其 UTF-8 代码点,然后将其转换为二进制/十进制。
  • @sdasdadas:首先,您的示例中的字符'\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 准编解码器......如果这是适合您的数据的规则)。
  • @sdasdadas:同时,解析器是否会为您提供单字节 UTF-8 可能是部分字符的字符串,或单字符可能是多字节 UTF-8 字符串的列表,或者...... ?在你知道自己拥有什么之前,你无法知道如何处理它。
猜你喜欢
  • 2016-12-10
  • 2015-09-18
  • 1970-01-01
  • 2012-05-23
  • 2015-08-01
  • 1970-01-01
  • 2012-07-30
  • 2014-06-29
相关资源
最近更新 更多