【问题标题】:How to convert a unicode string to a literal string in Python?如何在 Python 中将 unicode 字符串转换为文字字符串?
【发布时间】:2016-05-10 15:55:00
【问题描述】:

这里有几个例子(unicode)字符串:

a = u'\u03c3\u03c4\u03b7\u03bd \u03a0\u03bb\u03b1\u03c4\u03b5\u03af\u03b1 \u03c4\u03bf\u03c5'
b = u'\u010deprav so mu doma\u010di in strici duhovniki odtegovali denarno pomo\u010d . Kljub temu mu je uspelo'
c = u'sovi\xe9ticas excepto Georgia , inclusive las 3 rep\xfablicas que hab\xedan'

我的最终目标是拆分反斜杠(和空格),使其看起来像这样:

split_a = [u03c3, u03c4, u03b7, u03bd, ,u03a0, u03bb, u03b1, u03c4, u03b5, u03af, u03b1, ,u03c4, u03bf, u03c5]
split_b = ['', 'u010deprav', 'so', 'mu', 'doma', 'u010di', 'in', 'strici',  'duhovniki' odtegovali denarno pomo', 'u010d', '.', 'Kljub', 'temu', 'mu', 'je', 'uspelo']
split_c = ['sovi', 'xe9ticas', 'excepto', 'Georgia', ',', 'inclusive', 'las', '3',  'rep', 'xfablicas', 'que', 'hab', 'xedan']

(有空格和反斜杠的空白处完全可以)。

当我尝试使用这个进行拆分时:

a.split("\\"),它根本不会改变字符串。

我看到了这个例子here,这让我觉得我需要将我的字符串变成文字字符串(使用r)。但是,我不知道如何将我的大字符串列表转换为所有文字字符串。

当我搜索时,我得到了here。但是,当我运行 a.encode('latin-1').decode('utf-8') 时,我的编译器会抛出错误。它抛出的错误是'latin-1' codec can't encode characters in position 0-3: ordinal not in range(256)

所以,我的问题是:如何获取 unicode 字符串列表,以编程方式遍历它们并使它们成为字符串文字,然后在反斜杠上拆分?

【问题讨论】:

  • Python 是解释型语言,所以 Python 解释器会抛出错误。
  • 我觉得你的水平比我高一点,但谢谢你的信息!

标签: python string unicode encode string-literals


【解决方案1】:

您有一个 Unicode 字符串,每个字符串元素已经有一个 Unicode 代码点。 '\\' 只是打印到控制台的字符串的表示,它不是实际内容。

从中制作一个数字列表实际上很容易:

split_a = [ord(c) for c in a]

如果您需要创建一堆由字母 u 后跟十六进制值组成的字符串,那就稍微复杂一点:

split_a = ', '.join('u' + ('%04x' % ord(c)) for c in a)

【讨论】:

  • 第二个解决了我上面例子的问题。我已经编辑了我的问题以包含更多示例 unicode 字符串,如果您有其他类型的字符串的解决方案,请告诉我。
  • 正要推动提交类似的解决方案,所以我将添加一个后续评论 - 您必须做更多的工作才能仅显示未知字符的值编码。具体来说,在 OP 的示例中,将空格字符呈现为“”,而不是“u0020”。
  • @python_in_trouble 哇,现在这是一个完全不同的问题,要复杂得多。
【解决方案2】:

您可以使用 unicode_escape 代码将 unicode 字符串转换为其转义表示。

split_a = a.encode('unicode_escape').split('\\')

输出:

['',
 'u03c3',
 'u03c4',
 'u03b7',
 'u03bd ',
 'u03a0',
 'u03bb',
 'u03b1',
 'u03c4',
 'u03b5',
 'u03af',
 'u03b1 ',
 'u03c4',
 'u03bf',
 'u03c5']

【讨论】:

  • 如果我随后遍历split_a 列表并在“”(空格)上进一步遍历split,这对我有用。
猜你喜欢
  • 2014-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-04
相关资源
最近更新 更多