节约字符编码,perl 到 java
thrift character encoding, perl to java
我遇到了一个涉及字符编码的复杂情况。
我有一个 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。之后,一切正常。
我遇到了一个涉及字符编码的复杂情况。
我有一个 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。之后,一切正常。