Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中使用Java桥调用BIRT时正确的字符编码_Java_Php_Character Encoding_Birt_Php Java Bridge - Fatal编程技术网

在PHP中使用Java桥调用BIRT时正确的字符编码

在PHP中使用Java桥调用BIRT时正确的字符编码,java,php,character-encoding,birt,php-java-bridge,Java,Php,Character Encoding,Birt,Php Java Bridge,我打电话给BIRT,通过Java桥生成PDF报告: <?php require_once("java/Java.inc"); class runReport { function runReport($report, $param, $output) { header("Content-type: application/pdf"); header("Content-Disposition: attachment; filename=".$o

我打电话给BIRT,通过Java桥生成PDF报告:

<?php

require_once("java/Java.inc");

class runReport {

    function runReport($report, $param, $output) {

        header("Content-type: application/pdf");
        header("Content-Disposition: attachment; filename=".$output.".pdf");

        $report_name = RP_REPORT . $report;
        $ctx = java_context()->getServletContext();
        $birtReportEngine = java("org.eclipse.birt.php.birtengine.BirtEngine")->getBirtEngine($ctx);
        java_context()->onShutdown(java("org.eclipse.birt.php.birtengine.BirtEngine")->getShutdownHook());

        try{

            $connect = new Java("connectDb");

            $report = $birtReportEngine->openReportDesign($report_name);
            $task = $birtReportEngine->createRunAndRenderTask($report);

            foreach ($param as $key => $value) {
                $task->setParameterValue($key, new java("java.lang.String",$value));
            }

            $taskOptions = new java("org.eclipse.birt.report.engine.api.PDFRenderOption");
            $outputStream = new java("java.io.ByteArrayOutputStream");
            $taskOptions->setOutputStream($outputStream);
            $taskOptions->setOutputFormat("pdf");

            $task->setRenderOption( $taskOptions );
            $task->getAppContext()->put("OdaJDBCDriverPassInConnection", $connect->getConnection(SERVEUR, BDD_PORT, BDD, LOGIN_DB, PWS_DB));
            $task->run();
            $task->close();


        } catch (JavaException $e) {

            echo $e; //"Error Calling BIRT";
        }

        echo java_values($outputStream->toByteArray());

    }
}
?>

除非
$param
包含包含非ASCII字符的参数,否则此操作正常。当
$param
包含包含非ASCII字符的参数时,不会生成报告


$param
的编码未知。

使用拉丁语和瑞典语代替UTF-8

Java桥的默认编码为“UTF-8”。因此,字符串需要编码为UTF-8

foreach ($param as $key => $value) {
            $utf_8_value = mb_convert_encoding($report_name, "utf-8")
            $task->setParameterValue($key, new java("java.lang.String", $utf_8_value));
        }

如果
$param
的元素未进行
iso-8895-1
编码,请将
mb_convert_encoding
的第三个选项设置为适当的编码

在哪里指定?您能提供一个代码吗?在顶部添加:default_charset();我通过这个
标题修改了标题代码(“内容类型:application/pdf;charset=utf-8”)但无法打开报告@TechnicCoder2000,我假设通过使用“拉丁语-瑞典语”,您认为这是一个与MySQL相关的问题?如果是这样的话,我想你找错地方了。。。idk真的知道你在说什么,所以我想和蔼可亲,试着找到一个正确的答案你是说当
$birtReportEngine->openReportDesign($report\u name)包含非ASCII,结果不会返回到屏幕?您是否收到500错误?当发送到BIRT的参数包含非ASCII时,我无法打开pdf文件。
$report\u name
是文件名?因此,当文件名包含非ASCII字符时?
$report\u name
是具有.rptdesign扩展名的BIRT报告的文件名,即使此文件名包含所有ASCII字符,也会出现问题。但是您已声明“带重音的字母则无法打开报告”!?“强调”是非ASCII码。您能澄清一下吗?
$report\u name
没有问题,但是
$param
参数有问题。请参阅我的更新,它对
$param
的元素进行了编码