平时做深度学习的一些实验,都是使用的python语言。有时候想把自己做的一些小实验,改造成一个小应用,通过移动端或者浏览器端和用户进行交互。因为不太会使用python的一些诸如flask和django等Web应用框架,反而PHP使用的很熟练,所以我在做一些小功能小项目的时候,都是使用PHP语言作为接口,将服务端和移动端、浏览器端连接起来。 具体操作流程是:
发送请求 调用系统命令 结果 结果 客户端 PHP Python这种做法虽然有点舍近求远的味道(以后有时间了还是要学习一个基于python轻量级Web应用框架),但实际操作起来效果也还算不错。但是也出现了一个很严重的问题,即:使用PHP调用Python命令,但是无法返回汉字。
当使用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命令之前。 恩,问题解决 ?