将十六进制字符字符串转换为unicode字符串(python)

2024-09-29 23:29:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一串unicode序号(十六进制格式),如下所示:

\u063a\u064a\u0646\u064a\u0627

它是阿拉伯语字符串غينيا(来自阿拉伯语lorem ipsum生成器)的unicode表示。在

我想将unicode十六进制字符串转换为غينيا。我尝试了print u'%s' % "\u063a\u064a\u0646\u064a\u0627"(指出了here),但这只是返回十六进制格式,而不是符号。print word.replace("\u","\\u")也不起作用。怎么办?在


Tags: 字符串here格式unicode符号replacewordprint
1条回答
网友
1楼 · 发布于 2024-09-29 23:29:44

从这个问题上我不能完全确定你想要什么,所以我会把我能看到的两种情况都包括进去。在

案例1:您只想从代码中输出阿拉伯语字符串,使用unicode文本语法。在这种情况下,您应该在字符串文本前面加一个u,这样就可以像rain一样:

s = u"\u063a\u064a\u0646\u064a\u0627"
print(s)

这可能与

^{pr2}$

除了较短的。在这种情况下,将一个空字符串格式化为格式化字符串没有任何意义,因为它不会改变任何东西——换句话说,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不同的是,这是安全的,因为{}不允许类似函数调用的任何操作。还要注意,这里的s是一个以r为前缀的字符串,因此反斜杠没有转义,而是字面上的反斜杠字符。在

两段代码都正确输出

غينيا

关于案例1的print u'%s' % s的一些详细说明。它的行为不同,因为如果字符串已经被转义,它将不会像Unicode文本那样在格式中进行计算。这是因为Python实际上只在第一次计算Unicode文本类表达式(如s)的基础上构建Unicode。如果它已经被转义,那么使用普通的字符串操作就有点遥不可及了,因此您必须使用literal_eval再次计算它,以便正确地打印字符串。当你跑的时候

^{pr2}$

输出是

\u063a\u064a\u0646\u064a\u0627

请注意,这不是Unicode对象的表示,而是带有一些反斜杠和字符的ascii字符串。在

相关问题 更多 >

    热门问题