php使用exec时的编码问题

来源:互联网  责任编辑:小易  时间:2017/1/8 23:23:02
用户提出问题:php使用exec时的编码问题,具体如下:

通过互联网整理获得以下解决方法:

=================1楼=====================

使用iconv("GB2312","UTF-8//IGNORE",$data); 转码看看

=================2楼=====================

在cmd中直接执行这个command 输出后的是正常的中文
显然输出的时 gbk 的,你 header("Content-type: text/html; charset=utf-8"); 自然是不行的

=================3楼=====================

引用 1 楼 fdipzone 的回复:
使用iconv("GB2312","UTF-8//IGNORE",$data); 转码看看

额,但我是用R语言的脚本输出的图片,并非php自身输出的内容。

=================4楼=====================

引用 2 楼 xuzuning 的回复:
在cmd中直接执行这个command 输出后的是正常的中文
显然输出的时 gbk 的,你 header("Content-type: text/html; charset=utf-8"); 自然是不行的


有什么行的办法不,我一直没想明白的是php执行一个.r文件和在cmd中执行的差异是在哪里,如何可以修改。

=================5楼=====================

输出的是图片?
那要用 html 的img 标签显示

=================6楼=====================

引用 5 楼 xuzuning 的回复:
输出的是图片?
那要用 html 的img 标签显示


我还没用html的img标签进行展示,我用php调用r语言图像输出脚本后,在文件夹里查看png的图像文件,看到图片上的中文内容就已经是乱码了,如果我在cmd中直接调用r语言去生成的png图片上显示的中文就是正常的。

=================7楼=====================

截图来看

=================8楼=====================

既然是r语言去生成的png图片
那应该与php没有关系。
你在cmd下直接执行r命令正常。

而使用php调用失败,那么你使用php时,是在CGI模式还是cli模式下进行呢?
可以试试在cli模式下执行php

例如打开cmd
输入php test.php
test.php内就是exec调用r的代码,
看看是否正常

=================9楼=====================

引用 5 楼 xuzuning 的回复:
输出的是图片?
那要用 html 的img 标签显示


我还没用html的img标签进行展示,我用php调用r语言图像输出脚本后,在文件夹里查看png的图像文件,看到图片上的中文内容就已经是乱码了,如果我在cmd中直接调用r语言去生成的png图片上显示的中文就是正常的。


引用 8 楼 fdipzone 的回复:
既然是r语言去生成的png图片
那应该与php没有关系。
你在cmd下直接执行r命令正常。

而使用php调用失败,那么你使用php时,是在CGI模式还是cli模式下进行呢?
可以试试在cli模式下执行php

例如打开cmd
输入php test.php
test.php内就是exec调用r的代码,
看看是否正常

哇,确实好像有点眉目了,按照您说的在cmd中输入php test.php执行后输出的图片不会出乱码了,但为什么我在页面中使用ajax调用php文件执行的结果就出了乱码呢? 我怎么才能让页面执行调用也采用cli模式呢?

=================10楼=====================

有可能你的php是utf8,而html是gb2312导致,先试试不是ajax提交,而是直接在浏览器访问那个php呢,是否都乱码。

你用浏览器执行,就只能是CGI模式,cli需要在终端执行的。

那段中文是php传给r的,还是r里定义的?
如果是php传给r的,可以传之前使用iconv转一下编码实现。

=================11楼=====================

引用 10 楼 fdipzone 的回复:
有可能你的php是utf8,而html是gb2312导致,先试试不是ajax提交,而是直接在浏览器访问那个php呢,是否都乱码。

你用浏览器执行,就只能是CGI模式,cli需要在终端执行的。

那段中文是php传给r的,还是r里定义的?
如果是php传给r的,可以传之前使用iconv转一下编码实现。

1、不用ajax调用也是出乱码
2、中文不是php传的,是r通过读取一个csv文件得到的,csv文件是php生成的
php生成csv文件的时候做过iconv
  $name = iconv('utf-8','gb2312',$row['name']);
我猜想这个地方是不是转错了导致,所以我把这个地方改了一下
  $name =$row['name'];
结果还是不行
然后我又想是不是R语言读取的时候有问题,所以我又对R语言脚本做了一个修改
原脚本test_date<-read.csv("D:/wamp/www/gis_test/r/r_llfl.csv")
修改后 test_date<-read.csv("D:/wamp/www/gis_test/r/r_llfl.csv",encoding="UTF-8")
但还是失败了,使用页面调用还是乱码

=================12楼=====================

csv文件是php生成的,这就是问题的所在了

可以这样测试,比较一下cli模式下生成的csv,与cgi模式下生成的csv,看看文件编码是否一致。
也可以把两个csv发出来,我帮你看看。

=================13楼=====================

引用 12 楼 fdipzone 的回复:
csv文件是php生成的,这就是问题的所在了

可以这样测试,比较一下cli模式下生成的csv,与cgi模式下生成的csv,看看文件编码是否一致。
也可以把两个csv发出来,我帮你看看。

好像是一样的,木有看出来两个文件的区别

另外我怎么能上传文件?没上传过,好像只有图片上传的地方

=================14楼=====================

百度网盘

=================15楼=====================


引用 14 楼 fdipzone 的回复:
百度网盘

请大神帮看下
http://pan.baidu.com/s/1jI9HPCa

=================16楼=====================

兩個文件是一樣的,你繞過php,然後分別使用r獲取這兩個csv進行,如果有亂碼,則表示是r問題。否則就是其他問題了。

=================17楼=====================

不過你的csv文件是utf-8編碼的,但你說過是iconv裡面的 內容為gb2312,這個可以檢查一下。

=================18楼=====================

引用 17 楼 fdipzone 的回复:
不過你的csv文件是utf-8編碼的,但你說過是iconv裡面的 內容為gb2312,這個可以檢查一下。

我导出来是去掉了转换内容的,本来转换是为了在windows下直接打开方便看,但为了保持整体都是utf-8 我把
  $name = iconv('utf-8','gb2312',$row['name']);
改成了
  $name =$row['name'];
所以输出的都是utf-8格式。
我使用RSTUDIO直接调用r语言直输出这两个文件都是可以正常显示中文,但通过页面用php就输出的图片就是乱码。

=================19楼=====================

那你的意思就是,cli和cgi生成的csv文件编码不同了对不?

如果您还有更好的解决方法,请在最下面评论中留下您的解决方法


  • 本文相关:
  • 站长必读,如何真正写好一篇原创文章
  • 互联网之路细嗅蔷薇 资深站长分享掘金之道
  • 企业站的站长的工作重心究竟有哪些
  • 浅析:行业门户网站的一些盈利模式
  • 3000IP的企业网站每天订单不到30个的苦恼
  • 网站想内外兼修?先学习提高网站可用性的6大原则
  • 浅谈网页设计中的简约之美
  • 网页改版实战:日本设计师如何彻底优化旅游网站?
  • 网页改版实战!日本设计师如何彻底优化招聘网站?
  • 2015年值得关注的21个网页设计趋势
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2015 www.zgxue.com All Rights Reserved