thrift字符编码,perl到java

mar*_*ark 6 java perl thrift character-encoding

我有一个复杂的情况,我正在尝试处理涉及字符编码.

我有一个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",
Run Code Online (Sandbox Code Playgroud)

但是,当在java端接收到这些数据时,序列已被转换,所以在java中我们收到以下内容:\n \n \n \n {x}}

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

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

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

byte[] utf8 = templateParams.getBytes("UTF8");
normallisedTemplateParams = new String(utf8, "UTF8");
Run Code Online (Sandbox Code Playgroud)

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

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

mar*_*ark 1

问题最终诊断起来很困难,但解决起来却很简单。原来我在Java中用来转换的包使用的是java的默认编码UTF-16。我必须修改包并强制它使用 UTF-8。之后,一切顺利。