连接到 LDAP 时 JNDI 无法正确解码 BASE64 字符串

发布于 2024-12-20 04:26:42 字数 520 浏览 3 评论 0原文

我正在使用 JNDI 连接到 LDAP 服务器。服务器上的一些属性存储为 BASE64 字符串。

但是,当我查询服务器并获取结果时。这些属性已被解码,但未正确解码。例如,“[email protected]”可能会解码为“abcû< a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="ed89888bad8982808c8483c38e8280">[电子邮件受保护]"。

知道如何解决这个问题吗?

补充:

原来的BASE64字符串是:

Q049XCtHcm91cCBBUFNHLU9uLWJvYXJkaW5n4oCTTllDLE9VPU5ZQyxPV
 20=

I am using JNDI to connect to a LDAP server. A few attributes on the server are stored as BASE64 string.

However, when I query the server and get results back. These attributes are already decoded but not properly. For example, "[email protected]" may be decoded as "abcû[email protected]".

Any idea on how can I fix this?

Added:

The original BASE64 string is:

Q049XCtHcm91cCBBUFNHLU9uLWJvYXJkaW5n4oCTTllDLE9VPU5ZQyxPV
 20=

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

我做我的改变 2024-12-27 04:26:42

这看起来是 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");

This looks to be a problem between UTF16, which is Java's native character format, and UTF8. The entity that is encoding the string must be UTF8.

To decode a string from UTF8 use:

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

That gives me the right output. If you need to convert a UTF8 string to be UTF16 you'd do:

new String(utf8String.getBytes(), "UTF8");
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文