2016-07-21 2 views
6

나는 복잡한 문자 인코딩과 관련된 문제를 겪고있다.슬리 프 문자 인코딩, perl에서 Java로

나는 잔돈을 통해 자바 종점과 통신하는 펄 프로그램을 가지고 있으며, 자바는 데이터를 사용하여 레거시 PHP 서비스에 요청한다. 보기 흉하지만 마이그레이션 계획의 일부이므로 잠시 동안 작업해야합니다.

perl에서 thrift 객체의 필드 중 일부가 json으로 인코딩 된 문자열 인 thrift 객체가 생성됩니다. (: 절약에 댐퍼이어서 JSON 인코딩 및 부가이 데이터로부터 임) :

문제 펄 자바에 요청을하게되면, 스트링의 하나는 다음과 같은 점이다

'offer_message' => "<&lt;>&gt; 
&&amp; 
\x{c3}\x{82}\x{c2}\x{a9}&copy; 
<script>alert(\"XSS\");</script> 
https://url.com/imghp?hl=uk", 

그러나

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

:이 데이터는 자바 측 시퀀스 \ X {C3} \ X {82} \ X {C2} \ X {A9} 자바에서 우리는 다음받을 수 있도록 변환 된 수신 될 때 문제는 내가 두 번째 문자열을 레거시 PHP 프로그램에 전달하면 p의 덤프에서 가져온 문자열을 전달하면 실패한다는 것입니다. erl 해시, 성공합니다. 그래서 내 가정은 내가받은 문자열을 다른 인코딩으로 변환 할 필요가 있다는 것입니다. (틀린 경우 올바른 것으로, 올바른 해결책이라고 확신하지 못합니다).

나는 자바에서받은 매개 변수를 가져다 봤는데 내가 생각할 수있는 모든 인코딩으로 변환하려고했지만 작동하지 않는다. 예를 들면 다음과 같습니다.

나는 인코딩 방식을 다양하게 변화 시켜서 작동하는 것을 발견했습니다.

이 문제를 해결하는 올바른 방법은 무엇입니까? 짧은 시간 동안이 재밌는 솔루션은 다른 재 엔지니어링이 진행되는 동안 유일한 옵션입니다.

+0

예. 죄송합니다. 이것은 아주 새로운 것입니다. 첫 번째 문자열은 perl 해시의 데이터 덤프이며 json으로 변환 된 다음 중고품 객체에 추가되고 java에 전달되며 두 번째 문자열은 자바 측에서 수신 한 문자열입니다. – mark

+0

문제는 문자열이 UTF-8을 사용하여 인코딩된다는 것입니다. 'utf8 :: decode ($ h {offer_message}); '가 도움이 될 수 있습니다. (소스 코드를 해독하면 더 좋을 것입니다.) – ikegami

+0

문제는 희소식 직렬화와 관련이 있다고 생각하지만 필자가 믿는 펄 측에서 인코딩을 변경할 수 있습니다. 더 나은 인코딩 사용에 대한 아이디어가 있습니까? – mark

답변

1

결국 문제는 진단하기는 어렵지만 해결하기는 쉽지 않습니다. Java에서 변환 할 때 사용했던 패키지가 Java의 기본 인코딩 인 UTF-16을 사용하고 있다는 것이 밝혀졌습니다. 패키지를 수정하고 강제로 UTF-8을 사용해야했습니다. 그 후, 모든 것이 효과가있었습니다.