2011-12-07 6 views
0

JNDIを使用してLDAPサーバーに接続しています。サーバー上のいくつかの属性は、BASE64文字列として格納されます。JNDIは、LDAPに接続するときにBASE64文字列を正しくデコードしません。

しかし、私はサーバーに照会し、結果を戻します。これらの属性はすでにデコードされていますが、正しくはありません。たとえば、「[email protected]」は「abcû[email protected]」としてデコードされます。

これをどのように修正できますか?

を追加しました:

元BASE64文字列は次のようになります。これは、Javaのネイティブ文字形式でUTF16、UTF8との間で問題になりそうだ

Q049XCtHcm91cCBBUFNHLU9uLWJvYXJkaW5n4oCTTllDLE9VPU5ZQyxPV 
20= 
+0

問題のBASE64文字列を指定できますか? – Gray

+0

投稿を編集しました。 – nababa

+0

私はそれをデコードするときにいくつかのユニコード文字を取得します。それは期待されていますか?参照:http://pastebin.com/xtAMf276 – Gray

答えて

2

。文字列をエンコードしているエンティティはUTF8でなければなりません。

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

私の右出力を与える:UTF8の使用から文字列をデコードする

。 UTF8文字列をUTF16に変換する必要がある場合は、

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

しかし、Outlookはこれを適切に解読できます。また、このリンクを使用する場合:http://coderstoolbox.net/string/、文字列を入れ、UTF-8を選択すると、ダッシュが正しくデコードされます。 – nababa

+1

Javaのデフォルトのエンコーディングは、UTF-8ではなくUTF-16です。ここをクリックしてください: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

関連する問題