使用PHP调用Python命令无法返回汉字字符串的解决方法

    xiaoxiao2022-07-02  108

    前言

    平时做深度学习的一些实验,都是使用的python语言。有时候想把自己做的一些小实验,改造成一个小应用,通过移动端或者浏览器端和用户进行交互。因为不太会使用python的一些诸如flask和django等Web应用框架,反而PHP使用的很熟练,所以我在做一些小功能小项目的时候,都是使用PHP语言作为接口,将服务端和移动端、浏览器端连接起来。 具体操作流程是:

    发送请求 调用系统命令 结果 结果 客户端 PHP Python

    这种做法虽然有点舍近求远的味道(以后有时间了还是要学习一个基于python轻量级Web应用框架),但实际操作起来效果也还算不错。但是也出现了一个很严重的问题,即:使用PHP调用Python命令,但是无法返回汉字。

    配置信息

    名称版本PHP版本7.0.30操作系统ubuntu 16.04Python版本3.5Apache版本Apache2

    出现问题

    当使用PHP需要Python返回的数据中含有汉字的时候就会出现异常。 在PHP端出现“系统出现错误”的提示。 在apache的错误日志中,可以看出Python发生了如下错误

    Traceback (most recent call last): File “main.py”, line 154, in print(fenjie_result) UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 18-27: ordinal not in range(128)

    但是在操作ubuntu上直接输出是没有问题的。

    问题解决

    第一种办法:在python脚本添加定义标准输入语句。 在python文件头部加上

    import codecs sys.stdout = codecs.getwriter('utf-8')(sys.stdout.detach())

    第二种办法:在php脚本调用python命令的地方定义环境变量 php脚本中在调用python命令的地方加上:

    // 设置字符集,重要!!!! 非常重要。 $set_charset = 'export LANG=en_US.UTF-8;'; $cmd = "python3 main.py gen --model-path='checkpoints/tang_199.pth' --pickle-path='tang.npz' --start-words='".$start_words."' --prefix-words='".$prefix_words."' --use-gpu=False --acrostic='True'"; //echo $cmd; $poem = exec( $set_charset.$cmd, $output, $res );

    要记得将 ‘export LANG=en_US.UTF-8;’ 放入到 python命令之前。 恩,问题解决 ?

    最新回复(0)