【问题标题】:Base64 encoding/decoding not working with special characters in Java 1.6Base64 编码/解码不适用于 Java 1.6 中的特殊字符
【发布时间】:2019-10-24 15:08:26
【问题描述】:

我正在使用 JDK 1.6 并在尝试编码/解码法语单词时遇到问题。我的代码在:

String setText = "Vos factures impayées Internet sont";
String encodedText= Base64.encode(setText.getBytes());
Base64.decode(encodedText);
System.out.println("Encoded String: " + encodedText);
byte[] result =  Base64.decode(encodedText);
String decodedString = new String(result);
System.out.println("Decoded: " + decodedString);

结果是: 原始字符串 Vos Factures impayées Internet sont

编码字符串:Vm9zIGZhY3R1cmVzIGltcGF577+9ZXMgSW50ZXJuZXQgc29udA==

解码:Vos factures impay�es Internet sont

问题:在解码字符串时,我得到“�”特殊字符而不是“é”

【问题讨论】:

  • 程序实际上认为你的字符串是"Vos factures impay�es Internet sont",因为你的源文件的编码与Java编译器假定的文件编码不匹配。我的猜测是您将文件保存为 ISO 8859-1,但 Java 编译器假定为 UTF-8(因为 UTF-8 是所有非 Windows 系统上的默认编码)。确保您已将文件保存为 UTF-8 文件。
  • 不,我没有将其保存在 ISO 8859-1 中
  • String setText = "…" 行的十六进制转储,使用操作系统命令而不是 Java 代码执行,将非常有用。

标签: java encoding base64 string-decoding


【解决方案1】:

我没有 java 1.6 但尝试明确指定编码不依赖于平台设置,就像这样。也许会有所帮助。

String decodedString = new String(result, "UTF-8");

如果你分享你使用哪个包Base64会很好,出于什么原因?如果您将其与 xmlanswer 一起使用,则可能会有所不同。

【讨论】:

  • 这只是问题的一半。 Base64 编码表示包含以 UTF-8 编码的实际 字符 (U+FFFD) 的字节,这表明问题可能是由编译器假定的编码引起的。此外,Java 1.7 中引入了 StandardCharsets 类,因此代码需要为 new String(result, "UTF-8")
  • 使用 String decodedString = new String(result, "UTF-8"); 后遇到同样的问题我正在使用以下库 import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;导入 sun.misc.BASE64Encoder;由于某些限制,我在客户端级别使用 1.6 JDK,在服务器级别使用 1.8。在编码的字符串中,我需要传递一些 url,如“google.com
  • 我正在尝试使用 1.8 并且我的字符串中有 '�' 字符,我正在使用 new String(result, "UTF-8") 但它仍然不起作用,我将 UTF-8 更改为 @987654331 @ 及其按预期工作:)
猜你喜欢
  • 2016-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-04
  • 2015-06-12
  • 2017-09-21
相关资源
最近更新 更多