我正在尝试处理涉及字符编码的复杂情况。
我有一个 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",
但是,当在 java 端接收到此数据时,序列\x{c3}\x{82}\x{c2}\x{a9} 已被转换,因此在 java 中我们收到以下内容:
<<>>\\n&&\\nÃ�Â�Ã�©©\\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/