php - 如何解码 unicode python 参数?

标签 php python linux python-3.x unicode

使用以下代码(在 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/

相关文章:

python - 检测循环中的最后一次迭代

python - Keras LSTM 未训练

python - 如何将输出多路复用到 Python 中的操作系统文件描述符?

php - 无法识别本地发行人

javascript - PHP 的 imagefill() 问题

php - 如何在sql数据库中搜索多个字段和多个值

php - 怎么让邮件变成垃圾邮件

linux - 创建文件夹 bash 中每个子文件夹的文件列表

linux - 如何用awk正确拆分

linux - 系统范围的连续 Linux 库分析