我在尝试编码和解码从磁盘上的文件读取的字符串时遇到了错误的结果。
我使用以下代码进行解码然后编码:
byte[] word_bytes = new BASE64Decoder().decodeBuffer(word); //word is string variable
String tempStr = new BASE64Encoder().encode(word_bytes);
根据这段代码,我期待如果我打印“word”和“tempStr”,我应该会看到相同的结果。但是,值不同。
例如,如果word =“hi!”,则tempStr =“hi //”,并且所有单个字母单词都转换为空值。例如,如果word =“a”,则tempStr =“”。
磁盘上的文件采用UTF-8
编码。
如果有人可以解释此错误的原因,那将非常有帮助。
抱歉,如果这是一个非常基本的问题,我对编码格式没有太多的经验。由于
答案 0 :(得分:1)
您的编码/解码向后
Base64是一种将字节数组转换为字符串的方法,可以轻松传递,而不会弄乱字节编码。
因此,将字节数组编码为String,然后解码将其重新编码为字节数组
如果切换编码和解码的顺序
String tempStr = new BASE64Encoder().encode("hi".getBytes());
byte[] word_bytes = new BASE64Decoder().decodeBuffer(tempStr);
System.out.println(tempStr);
System.out.println(new String(word_bytes));
它会打印出来:
aGk=
hi
您似乎也在使用sun
Base64类,这不是一个好主意。这些是内部类,并不能保证它们将在未来的Java版本中存在,或者它们存在于所有Java实现中。
如果您使用的是Java 8,则可以使用新的java.util.Base64
类javadoc here,如果您使用的是Java 8之前的版本,则应使用具有Base64类的第三方库。