2011-12-07 30 views
0

我正在使用JNDI連接到LDAP服務器。服務器上的一些屬性存儲爲BASE64字符串。當連接到LDAP時,JNDI無法正確解碼BASE64字符串

但是,當我查詢服務器並得到結果。這些屬性已經解碼但不正確。例如,「[email protected]」可能被解碼爲「abcû[email protected]」。

任何想法,我該如何解決這個問題?

補充:

原BASE64字符串是:

Q049XCtHcm91cCBBUFNHLU9uLWJvYXJkaW5n4oCTTllDLE9VPU5ZQyxPV 
20= 
+0

你可以提供有問題的BASE64字符串嗎? – Gray

+0

編輯帖子。 – nababa

+0

因此,我解碼時會得到一些unicode字符。這是預期的嗎?請參閱:http://pastebin.com/xtAMf276 – Gray

回答

2

這看起來是UTF16之間的問題,這是Java的本地字符格式,UTF8。編碼字符串的實體必須是UTF8。

解碼來自UTF8使用的字符串:

// to decode a string 
String decoded = new String(Base64.decodeBase64(encoded.getBytes()), "UTF8"); 

這給了我正確的輸出。如果你需要將UTF8字符串轉換爲UTF16,你應該這樣做:

new String(utf8String.getBytes(), "UTF8"); 
+0

但是,Outlook可以正確解碼。另外,如果你使用這個鏈接:http://coderstoolbox.net/string/,放入字符串,並選擇UTF-8,破折號可以正確解碼。 – nababa

+1

Java的默認編碼是UTF-16而不是UTF-8。看到這裏:http://stackoverflow.com/a/643713/179850 – Gray

+0

這裏是如何做從UTF8轉換:http://stackoverflow.com/questions/88838/how-to-convert-strings-to-and- from-utf8-byte-arrays-in-java – Gray