我有这个简单的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设置的编码。
任何人都可以启发我来解决这个问题吗?提前谢谢!
答案 0 :(得分:0)
我遇到了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)));