У меня сложная ситуация, с которой я пытаюсь бороться с кодировкой символов.бережливое кодирование символов, perl для java
У меня есть программа perl, которая связывается с конечной точкой java через бережливость, затем java использует данные, чтобы сделать запрос к устаревшему php-сервису. Это уродливо, но часть плана миграции так требует работы на короткое время.
В perl создается объект бережливости, в котором некоторые поля объекта бережливости являются json-закодированными строками.
Проблема заключается в том, что, когда Perl делает запрос на Java, одна из строк выглядит следующим образом (это из данных: самосвала и впоследствии JSON кодируются и добавляют к бережливости):
'offer_message' => "<<>>
&&
\x{c3}\x{82}\x{c2}\x{a9}©
<script>alert(\"XSS\");</script>
https://url.com/imghp?hl=uk",
Однако, когда эти данные получены на стороне Java последовательность \ х {c3} \ х {82} \ х {c2} \ х {а9} была преобразована таким образом в Java мы получаем следующее:
<<>>\\n&&\\nÃ�Â�Ã�©©\\n<script>alert(\"XSS\");</script>\\nhttps://www.google.com.ua/imghp?hl=uk
проблема в том, что если я передаю вторую строку в устаревшую программу php, она терпит неудачу, если я передам строку, взятую из дампа p erl hash, он преуспевает. Поэтому я полагаю, что мне нужно преобразовать полученную строку в другую кодировку (исправьте меня, если я ошибаюсь, я не уверен, что это правильное решение).
Я попытался принять параметры, полученные в java, и преобразовать их в каждую кодировку, о которой я могу думать, однако она не работает. Так, например:
byte[] utf8 = templateParams.getBytes("UTF8");
normallisedTemplateParams = new String(utf8, "UTF8");
Я искал схемы кодирования в надежде, что найду что-то, что работает.
Каков правильный способ решить эту проблему? В течение короткого времени это грязное решение является моим единственным вариантом, пока происходит другая реорганизация.
Да, извините, это для меня совершенно новое. Первая строка представляет собой дамп данных хеша perl и преобразуется в json, а затем добавляется в объект бережливости и передается в java, вторая строка - то, что я получаю на стороне java. – mark
Я думаю, проблема в том, что строка кодируется с использованием UTF-8, и этого не должно быть. 'utf8 :: decode ($ h {offer_message});' может помочь. (Было бы даже лучше, если бы вы расшифровали исходный код.) – ikegami
Я подумал, что, возможно, проблема была связана с сериализацией бережливости, но я могу изменить кодировку на Perl-стороне, на которую я верю. У вас есть идея улучшить кодировку? – mark