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

标签 java php encoding utf-8 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)));

关于java - PHP Exec 和命令提示符 (cmd) 中的编码不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31235981/

相关文章:

java - 在 Glassfish 中捕获 MySQL 异常

java - 两个JTable共用滚动条

php - 测试一个目录是否是另一个文件夹的子目录

php - 如何将 HTML 代码存储在 Postgresql 数据库表字段中?

javascript - Uint8Array.buffer 数据的 Base 16 编码

encoding - 协议(protocol)告诉我将数值 150 编码为 0x01 0x50,将数值 35 编码为 0x00 0x35?

java - Android HTTP 请求编码

java - 使用Kibana和Java获取Elasticsearch中的特定字段

java - eclipse 。手动运行测试并使用 "maven install"后的不同行为

php - 手动设置ID、 Doctrine