【发布时间】:2018-09-23 04:52:59
【问题描述】:
我正在构建一个小型应用程序,将文本文件中的文本转换为 Base64,然后恢复正常。解码后的文本总是在第一行的开头返回一些汉字。
public EncryptionEngine(File appFile){
this.appFile= appFile;
}
public void encrypt(){
try {
byte[] fileText = Files.readAllBytes(appFile.toPath());// get file text as bytes
Base64.Encoder encoder = Base64.getEncoder();
PrintWriter writer = new PrintWriter(appFile);
writer.print("");//erase old, readable text
writer.print(encoder.encodeToString(fileText));// insert encoded text
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public void deycrpt(){
try {
byte[] fileText = Files.readAllBytes(appFile.toPath());
String s = new String (fileText, StandardCharsets.UTF_8);//String s = new String (fileText);
Base64.Decoder decoder = Base64.getDecoder();
byte[] decodedByteArray = decoder.decode(s);
PrintWriter writer = new PrintWriter(appFile);
writer.print("");
writer.print(new String (decodedByteArray,StandardCharsets.UTF_8)); //writer.print(new String (decodedByteArray));
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
encrypt() 之前的文本 FileBefore:
奶酪
西红柿
土豆
火腿
山药
加密后的文本文件 //5jAGgAZQBlAHMAZQANAAoAdABvAG0AYQB0AG8AZQBzAA0ACgBwAG8AdABhAHQAbwBlAHMADQAKAGgAYQBtAHMADQAKAHkAYQBtAHMA
解密后的文本文件
뿯붿奶酪
西红柿
土豆
火腿
山药
【问题讨论】:
-
能否在问题中包含 base64 内容?
-
将输出作为文本包含在您的问题中,而不是作为图像。
-
(
import java.util.Base64;) -
我强烈怀疑使用了不一致的编码。您还没有为
PrintWriters 中的任何一个指定编码。 -
我怀疑输入文本文件以
byte order mark(0xEF 0xBB 0xBF) 开头。在 Windows 上,您无法通过记事本看到byte order mark。
标签: java utf-8 decoder encoder-decoder