java - 节俭的字符编码,从 perl 到 java

标签 java perl character-encoding thrift

我正在尝试处理涉及字符编码的复杂情况。

我有一个 perl 程序,它通过 thrift 与 java 端点通信,然后 java 使用数据向遗留 php 服务发出请求。这很丑陋,但作为迁移计划的一部分,因此需要工作一段时间。

在 perl 中创建了一个 thrift 对象,其中 thrift 对象的一些字段是 json 编码的字符串。

问题是当perl向java发出请求时,其中一个字符串如下(这是来自data:dumper,随后被json编码并添加到thrift中):

'offer_message' => "<&lt;>&gt;
&&amp;
\x{c3}\x{82}\x{c2}\x{a9}&copy;
<script>alert(\"XSS\");</script>
https://url.com/imghp?hl=uk",

但是,当在 java 端接收到此数据时,序列\x{c3}\x{82}\x{c2}\x{a9} 已被转换,因此在 java 中我们收到以下内容:

<&lt;>&gt;\\n&&amp;\\n���©&copy;\\n<script>alert(\"XSS\");</script>\\nhttps://www.google.com.ua/imghp?hl=uk

问题是,如果我将第二个字符串传递给遗留 php 程序,它会失败,如果我传递从 perl 散列的转储中获取的字符串,它会成功。所以我的假设是我需要将接收到的字符串转换为另一种编码(如果我错了请纠正我,我不确定这是正确的解决方案)。

我已经尝试获取在 java 中接收到的参数并将它们转换为我能想到的每种编码,但是它不起作用。例如:

byte[] utf8 = templateParams.getBytes("UTF8");
normallisedTemplateParams = new String(utf8, "UTF8");

我一直在改变编码方案,希望能找到有用的东西。

解决这个问题的正确方法是什么?在短时间内,这个困惑的解决方案是我唯一的选择,而其他重新设计正在进行。

最佳答案

问题到底难诊断解决简单。事实证明,我用来在 Java 中转换的包使用的是 java 的默认编码 UTF-16。我不得不修改包并强制它使用 UTF-8。之后,一切正常。

关于java - 节俭的字符编码,从 perl 到 java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38505642/

相关文章:

java - 如何将传感器数据从作为服务器的arduino发送到tomcat上的jsp?

sql-server - PERL:无法在 Sybase SQL 驱动程序中使用变量到 MS SQL Server

Java 运行时 exec() 无法正确转义字符

文件名采用 UTF-8 格式的 Java 文件

go - 如何转换 unicode(例如 :\u2713) code to a rune(ex: ✓) in golang?

java - 两个可能的字符数的正则表达式

java - @PostConstruct @PreDestroy

java.awt.Graphics.fillRect() 行为不当

multithreading - Perl 线程 - 共享哈希引用

perl - 如何获取系统中安装的 rpm 软件包列表