繁体   English   中英

PHP Exec和命令提示符(cmd)中的不同编码

[英]Different Encoding in PHP Exec and in command prompt (cmd)

我有一个简单的PHP程序,在其中执行一个输出日语单词的jar:

<?php
exec("java -jar PixivClipboardPostGet.jar", $output);
$text = $output[0];
echo $text;
?>

这是java文件:

public class PixivClipboardPostGet {
    public static void main(String[] args) {       
    System.out.println("日本語");
    }
}

如果我在cmd中执行它,它将使用chcp 932打印正确的日语单词:

日本語

但是,当我通过PHP Exec执行它时,输出如下:

“ú–{Œê

我尝试了多种方法来更改PHP中的编码,以便它可以正确输出文本:

尝试1:

header('content-type: text/html; charset=utf-8');

输出:

���{��

尝试2:

$locale='ja-JP.utf-8';
setlocale(LC_ALL,$locale);
putenv('LC_ALL='.$locale);

输出:

���{��

我试过exec('chcp')只是为了知道exec使用的代码页,它可以正确输出932,即我为cmd设置的编码。

谁能启发我解决这个问题? 提前致谢!

我在中文中遇到C#的问题,并通过base64编码来解决参数和响应。

PHP

// UTF-8 without BOM.
$arg = base64_encode('日本語');
$response = exec("c:\hello.exe {$arg}");
$parse = base64_decode(urldecode($response));

C#

// Decode the argument to UTF-8
byte[] arg = Convert.FromBase64String(input);
string foo = Encoding.UTF8.GetString(farg);

...

// Output UTF-8 base64 string
byte[] string = System.Text.Encoding.UTF8.GetBytes(result);
Console.WriteLine(HttpUtility.UrlEncode(Convert.ToBase64String(string)));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM