Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unicode到PHP exec_Php_Python_Unicode_Exec - Fatal编程技术网

Unicode到PHP exec

Unicode到PHP exec,php,python,unicode,exec,Php,Python,Unicode,Exec,我用PHP的exec函数调用了一个Python文件。Python然后输出一个字符串(显然是Unicode,基于使用isinstance),PHP会响应该字符串。我遇到的问题是,如果我的字符串中有任何特殊字符(如度符号),它将不会输出。我肯定我需要做些事情来修改编码,但我不确定该做什么,为什么 编辑:要了解如何调用exec,请参阅以下代码片段: $tables = shell_exec('/s/python-2.6.2/bin/python2.6 getWikitables.py '.$title

我用PHP的
exec
函数调用了一个Python文件。Python然后输出一个字符串(显然是Unicode,基于使用
isinstance
),PHP会响应该字符串。我遇到的问题是,如果我的字符串中有任何特殊字符(如度符号),它将不会输出。我肯定我需要做些事情来修改编码,但我不确定该做什么,为什么

编辑:要了解如何调用
exec
,请参阅以下代码片段:

$tables = shell_exec('/s/python-2.6.2/bin/python2.6 getWikitables.py '.$title);
当我单独调用
getWikitables.py
时,Python会正确地输出字符串


EDIT:这显然是Python端的问题,或者是传输结果的问题。当我在PHP中对返回的值运行strlen时,得到0。
exec
只能接受某种类型的编码吗?

在php上,您可以使用或之类的方法来解决问题。

在执行Python脚本之前,请尝试设置
LANG
环境变量:

(使用to(希望)使跟随长字符串更容易一些)

在调用
shell\u exec()
之前,您可能还需要执行以下操作:


我遇到了一个类似的问题,并用以下方法解决了它。我不明白为什么有必要这么做,因为我想所有的都已经用UTF-8处理过了。在命令行上调用Python脚本是可行的,但通过PHP和Apache调用exec(shell_exec)是行不通的

根据a,当您想要使用时,需要此选项:

需要在执行
escapeshellarg()
之前调用它。此外,有必要在exec命令之前设置一个特定值(发现一个不相关的提示):

我的Python脚本计算的参数如下:

sys.argv[1].decode("utf-8")
(提示:这是必需的,因为我使用a转换一些阿拉伯语文本。)

最后,我可以想象原来的问题可以这样解决:

setlocale(LC_CTYPE, "en_US.UTF-8");
putenv("PYTHONIOENCODING=utf-8");
$tables = shell_exec('/s/python-2.6.2/bin/python2.6 getWikitables.py ' .
          escapeshellarg($title));
但是我不能告诉任何关于返回值的事情。在我的情况下,我可以将它直接输出到浏览器,而不会出现任何问题


花了很多很多时间才发现。。。我讨厌我的工作的一种情况;-)

两者都不起作用-问题可能是从Python传输到php,我需要在Python方面做些什么吗?可能是,也可能是php输出字符集。试试它的
header('Content-type:text/html;charset=utf-8')
并告诉我是否得到了不同的结果。您需要查看PHP的多字节库。这可以告诉您返回的编码是什么,您可以将其转换为utf-8并使其可见。您可以发布一段代码片段,说明如何调用exec来获取字符串。哦,天哪,我在这方面花了6个小时!第二种解决方案解决了这个问题。
setlocale(LC_CTYPE, "en_US.UTF-8");
putenv("PYTHONIOENCODING=utf-8");
sys.argv[1].decode("utf-8")
setlocale(LC_CTYPE, "en_US.UTF-8");
putenv("PYTHONIOENCODING=utf-8");
$tables = shell_exec('/s/python-2.6.2/bin/python2.6 getWikitables.py ' .
          escapeshellarg($title));