LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1658|回复: 6

请教一个关于php exec java的乱码问题?

[复制链接]
发表于 2005-10-9 19:35:59 | 显示全部楼层 |阅读模式
问题是这样的:
我有一个java程序PhpClient.class,一个php程序getList.php.其中getList.php中的代码如下
<?php
$str = exec("java PhpClient");
echo $str;
?>
在shell下面运行java PhpClient或者php -q getList.php都会得到以下结果:

324,lynk,A,技术部,53|325,admin,A,市场部,54|326,alex,A,市场部,54

但是在IE中输入http://devel/~link/getList.php显示结果为:

324,lynk,A,?????????,53|325,admin,A,?????????,54|326,alex,A,?????????,54

我尝试将IE的字符编码改成其他任何编码,java中也尝试过 String strOut = new String(str.getBytes(),"UTF-8");显示结果都一样~

找了半天都没有找到其中的原因~希望高手能指点一下~
发表于 2005-10-10 18:11:03 | 显示全部楼层
因为console输出是根据系统编码的,除非你装了zhcon还把服务器编码设定为gbk.......
回复 支持 反对

使用道具 举报

发表于 2005-10-12 09:31:13 | 显示全部楼层
据说可以用luit工具转换编码,感兴趣就查看下man手册
回复 支持 反对

使用道具 举报

发表于 2005-10-13 22:58:03 | 显示全部楼层
兄弟的用法比较特殊 ^_^,一般是php用apache解析,java用tomcat解析的;
里面涉及几个概念问题,console中执行的php -q getList.php是使用的php-cli,其编码取决于你的locales(这个nbxmedia已经解释过了),而apache中执行解析任务的是libapache2-php-mod模块,其编码取决于apache.conf或httpd.conf中AddDefaultCharset的设置,明白了这个,解决办法就很简单了,我的是debian,修改/etc/apache2/apache2.conf
在其中加入
[php]
AddDefaultCharset       utf-8
[/php]
然后
[php]
#>apache2 -k stop
#>apache2 -k start
[/php]
测试脚本如下:
Eample.java
[php]
class Eample
{
        public static void main(String args[])
        {
                String s1,s3,s4;
                s1=new String("洒顶呱呱");
                System.out.println(s1);
                s3="how 大海are you";
                s4="how are 撒谎you";
                System.out.println(s3);
                System.out.println(s4);
        }
}
[/php]
php脚本del51.php
[php]
<?php
exec("java Eample",$str);
var_dump($str);
?>
[/php]
执行结果:
array(3) { [0]=>  string(12) "洒顶呱呱" [1]=>  string(17) "how 大海are you" [2]=>  string(17) "how are 撒谎you" }
字符显示正常,将AddDefaultCharset       utf-8屏蔽调,重新启动apache2,显示结果
array(3) { [0]=>  string(4) "????" [1]=>  string(13) "how ??are you" [2]=>  string(13) "how are ??you" }
结果显示为乱码。
回复 支持 反对

使用道具 举报

发表于 2005-10-14 18:15:37 | 显示全部楼层
建议把AddDefaultCharset屏蔽,制造麻烦的东西.......
回复 支持 反对

使用道具 举报

发表于 2005-10-14 18:36:06 | 显示全部楼层
Post by nbxmedia
建议把AddDefaultCharset屏蔽,制造麻烦的东西.......

nbx:我平常也是屏蔽的,但“半根の煙草”的要求比较特殊,除此之外,别无解决办法啊!
实际上根好的办法是把java的解析让tomcat来完成,可不附和要求啊!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-28 11:07:20 | 显示全部楼层
谢谢, nbxmedia  和 cg111 的解释.
如果添加AddDefaultCharset utf-8的确可以解决问题,但是这样的话,的确有许多麻烦.
由于这样解决问题似乎绕了很大的一个圈,上级决定采用其他的办法.不使用php调用java了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表