У меня есть эта простая PHP-программа, где она выполняет банку, которая выводит японское слово:
<?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.
Может ли кто-нибудь просветить меня, чтобы решить эту проблему? Заранее спасибо!
У меня была проблема с С# в китайском языке и разрешена кодировкой base64 для аргументов и ответов.
PHP
// UTF-8 without BOM.
$arg = base64_encode('日本語');
$response = exec("c:\hello.exe {$arg}");
$parse = base64_decode(urldecode($response));
С#
// 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)));