Различная кодировка в PHP Exec и в командной строке (cmd)

1

У меня есть эта простая 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.

Может ли кто-нибудь просветить меня, чтобы решить эту проблему? Заранее спасибо!

Теги:
cmd
utf-8
encoding

1 ответ

0

У меня была проблема с С# в китайском языке и разрешена кодировкой 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)));

Ещё вопросы

Сообщество Overcoder
Наверх
Меню