我有一串 unicode 序号(以十六进制形式),如下所示:
\u063a\u064a\u0646\u064a\u0627
它是阿拉伯字符串的 unicode 表示غينيا
(从阿拉伯语 lorem ipsum 生成器中获得)。
我想将 unicode 十六进制字符串转换为غينيا
. 我尝试过print u'%s' % "\u063a\u064a\u0646\u064a\u0627"
(在此处指出),但这只是返回十六进制格式,而不是符号。print word.replace("\u","\\u")
也不做这项工作。该怎么办?
我不完全确定你想要什么,所以我会涵盖我能看到的两种情况。
情况 1:您只想使用 unicode 文字语法从代码中输出阿拉伯字符串。在这种情况下,你应该在你的字符串文字前加上 au ,你会像下雨一样:
s = u"\u063a\u064a\u0646\u064a\u0627"
print(s)
这可能与
print u'%s' % s
除了更短。在这种情况下,将一个空字符串格式化为已形成的字符串没有任何意义,因为它没有改变任何东西 - 换句话说,u'%s' % s == s
.
情况 2:您有一个来自其他来源的转义字符串,您想将其计算为 Unicode 字符串。这就是你试图用print u'%s' %
. 这可以用
import ast
s = r"\u063a\u064a\u0646\u064a\u0627"
print ast.literal_eval("u'{}'".format(s))
请注意,与eval
this不同的是安全的,因为literal_eval
不允许任何类似函数调用的操作。另请参阅此处的 s 是一个以 r 为前缀的字符串,因此反斜杠不会转义任何内容,而是字面上的反斜杠字符。
两段代码正确输出
غينيا
print u'%s' % s
对案例 1 的一些详细说明。这表现不同,因为如果字符串已经被转义,它不会像格式化中的 Unicode 文字一样被评估。这是因为 Python 仅在第一次计算时才从 unicode 类似文字的表达式(例如 s)中实际构建 Unicode。如果它已被转义,则使用普通字符串操作是无法实现的,因此您必须再次使用literal_eval
来评估它以正确打印字符串。当你跑
print u'%s' % s
输出是
\u063a\u064a\u0646\u064a\u0627
请注意,这不是 Unicode 对象的表示,而是字面上带有一些反斜杠和字符的 ascii 字符串。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句