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打印的)。