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,提问作者조민재
相关产品推荐
相关产品推荐

