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' => "<<>>
&&
\x{c3}\x{82}\x{c2}\x{a9}©
<script>alert(\"XSS\");</script>
https://url.com/imghp?hl=uk",
Run Code Online (Sandbox Code Playgroud)
但是,当在java端接收到这些数据时,序列已被转换,所以在java中我们收到以下内容:\n \n \n \n {x}}
<<>>\\n&&\\nÃ?Â?Ã?©©\\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)
我一直在改变编码方案,希望我找到有用的东西.
解决这个问题的正确方法是什么?在很短的时间内,这个混乱的解决方案是我唯一的选择,而其他重新设计正在进行中.