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

PHP调用Python写韩文文件报utf-8编码surrogates不允许错误 终端运行正常

问题根因

这个UnicodeEncodeError: surrogates not allowed报错核心是PHP调用Python进程时的环境编码不匹配,导致传递给Python的韩文字符串app_name被转成了UTF-8不支持的孤立代理字符:

  • 直接在终端运行时,终端默认的LANG/LC_ALL环境变量为UTF-8编码,参数传递全程编码连贯,Python接收到的是合法的Unicode韩文字符,写入文件无异常
  • 通过PHP Web端调用时,PHP启动的Python子进程继承的是Web服务(Nginx/Apache等)的默认环境变量,编码通常不是UTF-8,导致韩文参数转码时产生了无效的孤立代理字符,写入UTF-8编码的文件时触发报错

另外你贴的代码本身存在低级逻辑错误:替换完line变量后直接执行了continue,替换后的内容根本没有写入文件,需要先把这个continue删除。

修复方案
  • 方案1:PHP调用Python前主动设置进程环境编码
    在PHP执行Python脚本的代码前加入以下配置,强制子进程使用UTF-8编码:
    putenv('LANG=en_US.UTF-8');
    putenv('LC_ALL=en_US.UTF-8');
    
  • 方案2:Python侧兼容处理代理字符
    打开写入文件时新增errors='surrogateescape'参数,自动处理无效代理字符:
    f = open(write_file_path, 'w', encoding='UTF-8', errors='surrogateescape')
    
    也可以在接收app_name参数时主动修复编码:
    app_name = app_name.encode('utf-8', 'surrogateescape').decode('utf-8')
    

内容的提问来源于stack exchange,提问作者조민재

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:30:01