2010-06-27 4 views
3

sun.misc.BASE64Encoder를 사용하여 암호화 된 값을 인코딩 한 다음 JSON 필드에 추가 한 다음 나중에 클라이언트로 보냅니다. 클라이언트에서 Javascript의 eval() 함수를 사용하여 JSON 코드에서 객체를 만듭니다. 평가()를 실행하면 오류를 제공합니다javascript eval json with base64 인코딩 된 필드

unterminated string literal

는 JSON 코드의 다른 필드가 있습니다,하지만 난 필드를 base64 인코딩에 특히 오류를 좁혀했습니다. 여기

var result = eval('(' + xhr.responseText + ')'); 

서블릿에서 JSON 개체의 : 여기에 자바 스크립트 코드의 잘못된 줄입니다

{ 
    'resource':'resource?Signature=j79r/2Hly+HqhS/6fdd+prfsR+kUNijUvDN0QJ14ZR43gzYScOMDypt/crks/CEphTUXVptJvSol 
1ZOOvScCUhNOCb7dZk/3MKnI5tOewSACXK32/OJNd8hYpZtSTn+WhA6+f9BUIUZWA83U8Cud/Tb8V 
R1yQWbDGG/mM/NiUSiY=', 

'url':'http://somesite.com/pr' 
} 

평가가 죽어가는 이유를 잘 모르겠어요,하지만 그것은 '자원'의 값을 보인다 JSON 필드는 상관하지 않는 것을 포함합니다.

미리 감사드립니다. Tim

+1

어쩌면 그것은 \ n 그 eval() 죽이고 ...? – Tim

+1

그건 그렇고, 실제로는 잘못된 JSON을 사용하고 있습니다. JSON은 작은 따옴표가 아닌 속성 이름과 문자열 값을 큰 따옴표로 묶습니다. 분명히 그것은 단지'평가 '를하면 작동하지만 엄격한 JSON 구문 분석기는 실패합니다. –

답변

1

JSON에 줄 바꿈이있는 것으로 보입니다. 제거하면 작동합니까?

+0

이것은 꽤 가능성이 높은 것처럼 보입니다. 일부 Base64 인코더는 실제로 이러한 줄 바꿈을 입력하지만 JavaScript의 세미콜론 삽입으로 인해 문자열 내부에 리터럴 줄 바꿈이 문제를 일으킬 수 있습니다. 팀, 당신은 Alex가 여기에 제안한 것뿐만 아니라 sun.misc.BASE64Encoder에 줄 바꿈을 제어 할 수있는 옵션이 있는지 확인하고 싶을 수도 있습니다. –

+0

http://www.source-code.biz/base64coder/java/Base64Coder.java.txt 여기에서 sun.misc.Base64Encoder의 소스를 살펴 보았습니다. 'encodeLines' 메쏘드를 사용한다면,'encode'를 사용해보십시오. –

+0

예, 인코딩 된 문자열에서 줄 바꿈을 제거하면 오류가 발생하지 않습니다. 괜찮은 Base64 인코더는 '\ n'을 출력해서는 안됩니다. – Tim

관련 문제