我在报告显示名称时遇到问题。我的应用程序使用不同的技术 PHP、Perl 和 BI Pentaho。
我们使用 MYSQL 作为数据库,我的表是CHARSET=utf8
.
我的表存储在如下行中的值,这是错误的
Row1 = Ãx—350
Row2 = Ñz–401
PHP 和 Perl 使用不同的内置函数来转换存储在 DB 中的上述值,并在 UI 中显示如下,这是正确的
Expected Row1 = Áx—350
Expected Row2 = Ñz–401
对于使用 pentaho 的报告,我使用 ETL 在报告中显示数据之前转换数据。为了转换上述数据库存储值,我尝试通过 Java 步骤转换数据,如下所示
new java.lang.String(new java.lang.String(CODE).getBytes("Windows-1252"), "UTF-8")
但它没有正确转换值,在上述 2 个错误值中,只有Row2值被正确转换,但第一个Row1错误转换如下
Converted Row1 = �?x—350
Converted Row2 = Ñz–401
请建议我可以正确转换值的方法,以便例如Row1值应正确转换为Áx—350。
我写了一个如下的Java小程序来将Ãx—350字符串转换为Áx—350
String input = "Ãx—350";
byte[] b1 = input.getBytes("Windows-1252");
System.out.println("Input Get Bytes = "+b1.toString());
String szUT8 = new String(b1, "UTF-8");
System.out.println("Input Encoded = " + szUT8);
上述代码的输出如下
Input Get Bytes = [B@157ee3e5
Input Encoded = �?x—350-350—É1
如果我们看到输出,则实际预期输出为Áx—350的字符串是错误的。
为了确认编码/解码方案,我尝试在线测试字符串并使用字符串Ãx –350 进行测试,输出与预期的一样 Áx–350是正确的。
因此,请从这里任何人指出为什么 java 代码无法正确转换,尽管我使用了正确的编码/解码方案,其他任何我遗漏的或我的方法都是错误的。