使用以下代码(在 PHP 中)我将字符串发送到 python 程序:
shell_exec("python3 /var/www/html/app.py \"$text\"");
$text
变量包含非英语字符串。问题是,当我使用 print(sys.argv)
在 Python 中打印参数时,我得到如下结果:
['/var/www/html/app.py', '\udcd8\udca8\udcd8\udcaa\udcd8\udcb5\udcd8\udcb4\udcda\udca9 \udcd8\udcae\udcd8\udcab\udcd9\udc87\udcd8\udca8 \udcd8\udcaa\udcd8\udcb4\udcd8\udcb5\udcd8\udcab']
如何将此 unicode 字符串转换为 python 中文本的原始形式?
最佳答案
Python 使用您的语言环境的编码来解码从命令行获取的字节。默认 C 语言环境使用 ascii。 $text
似乎是 utf-8 格式。因此,Python 必须使用 surrogateescape
错误处理程序将这些字节解码为文本 sys.argv[1]
,生成单独的代理项,例如 '\udcd8'
您在输出中看到的内容。
您可以使用 utf-8 语言环境,例如 LC_ALL=C.UTF-8
或手动重新编码参数:sys.argv[1].encode(locale.getpreferredencoding(True) , 'surrogateescape').decode('utf-8')
:
>>> s = u'\udcd8\udca8\udcd8\udcaa\udcd8\udcb5\udcd8\udcb4\udcda\udca9 \udcd8\udcae\udcd8\udcab\udcd9\udc87\udcd8\udca8 \udcd8\udcaa\udcd8\udcb4\udcd8\udcb5\udcd8\udcab'
>>> print(s.encode('ascii', 'surrogateescape').decode('utf-8'))
بتصشک خثهب تشصث
关于php - 如何解码 unicode python 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25939176/