Python3 脚本在 shell 中运行良好,但在 PHP 中触发 UnicodeEncodeError

Posted

技术标签:

【中文标题】Python3 脚本在 shell 中运行良好,但在 PHP 中触发 UnicodeEncodeError【英文标题】:Python3 script runs fine from shell but triggers UnicodeEncodeError within PHP 【发布时间】:2019-06-03 15:47:20 【问题描述】:

考虑以下脚本:

#!/usr/bin/env python3

print("<h1>é</h1>")

我正在尝试从 php 运行它:

<?php
    system("/usr/bin/python3 /my/script.py");
?>

它在 shell 中运行良好,但通过 PHP 崩溃:

UnicodeEncodeError: 'ascii' codec can't encode character '\xe9' in position 3: ordinal not in range(128)

如果我添加.encode('utf-8') PHP 打印字节编码字符串:

b'\xc3\xa9'

我该如何解决?在 python 脚本中添加 # -*- coding: utf-8 -*- 或在字符串前面加上 u 没有帮助,我认为 utf-8 应该是 python3 的默认值?

【问题讨论】:

【参考方案1】:

解决方法是显式设置PYTHONIOENCODING

<?php
    system("PYTHONIOENCODING=utf-8 /usr/bin/python3 /my/script.py");
?>

[Credits.]

【讨论】:

以上是关于Python3 脚本在 shell 中运行良好,但在 PHP 中触发 UnicodeEncodeError的主要内容,如果未能解决你的问题,请参考以下文章

Python脚本通过shell运行但不能通过supervisord运行

Crontab定时任务中python3脚本无法运行问题解决

init 脚本在 databricks 笔记本中运行良好,但在附加到集群时失败

写好shell脚本的13个技巧

应用程序在 Python2 和 Python3 中的 Windows 上运行良好,但收到错误:无法导入 android,并且按钮无响应

ui 和服务器脚本作为一个脚本运行,运行良好。但是在不同的文件 ui.R 和 server.R 中运行脚本会引发错误