Python 3.x Python3-将unicode文本字符串转换为unicode字符串

Python 3.x Python3-将unicode文本字符串转换为unicode字符串,python-3.x,unicode,python-unicode,unicode-literals,Python 3.x,Unicode,Python Unicode,Unicode Literals,我从命令行参数(sys.argv)接收unicode文本字符串,如下所示:'\u041f\u0440\u0438\u0432\u0435\u0442\u0021' 例如,此脚本uni.py: import sys print(sys.argv[1]) 命令行: python uni.py \u041f\u0440\u0438\u0432\u0435\u0442\u0021 \u041f\u0440\u0438\u0432\u0435\u0442\u0021 输出: python uni.p

我从命令行参数(
sys.argv
)接收unicode文本字符串,如下所示:
'\u041f\u0440\u0438\u0432\u0435\u0442\u0021'

例如,此脚本uni.py:

import sys
print(sys.argv[1])
命令行:

python uni.py \u041f\u0440\u0438\u0432\u0435\u0442\u0021
\u041f\u0440\u0438\u0432\u0435\u0442\u0021
输出:

python uni.py \u041f\u0440\u0438\u0432\u0435\u0442\u0021
\u041f\u0440\u0438\u0432\u0435\u0442\u0021

我想将其转换为unicode字符串
'

您不必将其转换为Unicode,因为它已经是Unicode了。在Python3.x中,字符串默认为Unicode。当您想读取或写入字节时(例如,在写入文件时),只需将它们转换为字节(转换为字节或从字节转换为字节)

如果您只打印字符串,您将得到正确的结果,前提是您的终端支持这些字符

print('\u041f\u0440\u0438\u0432\u0435\u0442\u0021')
这将打印:

Пццццццц

更新

在更新您的问题之后,我很清楚,所提到的字符串实际上不是字符串文字(或unicode文字),而是来自命令行的输入。在这种情况下,您可以使用“unicode转义”编码来获得所需的结果。 请注意,编码从Unicode到字节,解码从字节到Unicode。在这种情况下,您需要从Unicode到Unicode的转换,因此您必须添加一个使用拉丁-1编码的“虚拟”解码步骤,它可以透明地将Unicode代码点转换为字节

以下代码将为您的示例打印正确的结果:

text=sys.argv[1]。编码('latin-1')。解码('unicode-escape'))
打印(文本)
更新2

或者,您可以使用
ast.literal\u eval()
来解析输入中的字符串。但是,此方法需要一个正确的Python文本,包括引号。你可以做一些类似的事情来解决这个问题:

text=ast.literal\u eval(“”+sys.argv[1]+“”)

但是请注意,如果输入字符串中有一个引号,则会出现这种情况。我认为这有点像黑客,因为这个方法可能不是为了你使用它的目的。unicode转义更简单、更健壮。但是,最佳解决方案取决于您正在构建的内容。

请澄清您想要做什么<代码>'\u041f\u0440\u0438\u0432\u0435\u0442\u0021'
是字符串
'。澄清上述内容:该表示形式仅为Python表示形式,因为某些终端无法打印Unicode。做这个简单的实验:打印出第一个字符的序数值。您将看到它是
1055
0x41f
十进制),而不是
92
,反斜杠的值(也不是
39
——单引号,因为它也不是“字符串的一部分”,即使它也是由Python打印的)。