You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python读取含ê字符的葡萄牙语文本文件时的编码异常问题

问题原因分析

当通过PHP的exec()或shell_exec()调用Python脚本时,子进程的环境变量与终端直接运行时存在差异。Linux终端会话通常会将LANG或LC_*系列环境变量设置为UTF-8(例如LANG=en_US.UTF-8),但PHP运行在Web服务器(如Apache、Nginx)环境下时,子进程的默认环境编码可能被设为ASCII。此时Python输出含特殊字符的内容时,会尝试用ASCII编码处理,从而触发编码错误。

尽管Python默认编码为UTF-8,但输出流的编码会继承系统环境设置,当环境编码为ASCII时,print()语句输出UTF-8字符就会失败。

解决方案建议

1. 在Python脚本中显式指定输出流编码

修改Python脚本,强制标准输出使用UTF-8编码,摆脱对环境变量的依赖:

import sys
sys.stdout.reconfigure(encoding='utf-8')

filename = "newfile.txt"
with open(filename, "r", encoding="utf-8") as file:
    file_content = file.readline().strip()
    print(file_content)

2. 在PHP命令中临时设置环境变量

调用Python脚本前,先设置LANG环境变量为UTF-8,确保子进程使用正确编码:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>read python</title>
</head>
<body>
<?php 
$pythonScript = "read.py";
// 设置UTF-8环境变量后执行Python脚本
$command = "LANG=en_US.UTF-8 python3 " . $pythonScript;
$output = shell_exec($command); 
echo $output; 
?>
</body>
</html>

3. 全局配置Web服务器环境变量

如果临时设置无效,可在Web服务器配置文件中全局指定UTF-8环境变量:

  • Apache:在httpd.conf或虚拟主机配置中添加SetEnv LANG en_US.UTF-8
  • Nginx:在FastCGI配置块中添加env LANG=en_US.UTF-8;

这样所有PHP触发的子进程都会继承正确的编码环境。

内容的提问来源于stack exchange,提问作者user2105386

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 02:33:18