gpt4 book ai didi

java - Base64.Decoder 返回外来字符

转载 作者:行者123 更新时间:2023-11-30 06:13:15 27 4
gpt4 key购买 nike

我正在构建一个小型应用程序,将文本文件中的文本转换为 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();
}



}

加密之前的文本文件():

奶酪

西红柿

土 bean

火腿

山药

加密后的文本文件()//5jAGgAZQBlAHMAZQANAAoAdABvAG0AYQB0AG8AZQBzAA0ACgBwAG8AdABhAHQAbwBlAHMADQAKAGgAYQBtAHMADQAKAHkAYQBtAHMA

解密后的文本文件

奶酪

西红柿

土 bean

火腿

山药

Before encrypt() :

After decrypt() :

最佳答案

您的输入文件是 UTF-16,而不是 UTF-8。它以 FF FE 开头,即小端字节顺序标记。 StandardCharsets.UTF_16 将正确处理此问题。 (或者,将文本编辑器设置为 UTF-8 而不是 UTF-16。)

当您将 fffe 解码为 UTF-8 时,您得到两个替换字符 "��",每个字符对应 UTF-8 中无效的两个字节8.然后,当您打印出来时,每个替换字符 '�' 都被编码为 UTF-8 中的 ef bf bd。然后,您将结果解释为 UTF-16,将它们分成两个组,将其读取为 efbf bdef bfbd。文件的其余部分始终为 UTF-16,但空字节将安全地往返。

(如果文件是 ascii 文本编码为 UTF-16 且没有字节顺序标记,您将不会注意到这是多么糟糕!)

关于java - Base64.Decoder 返回外来字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49806661/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com