我正在做一个项目,要求我将存储在Windows文本文件中的UTF-8字符串转换为连续的二进制字符串并将其存储在Windows文本文件中。 然后读取此二进制字符串并将其转换回原始的UTF-8字符串并将其存储在文本文件中。 我将UTF-8字符串转换为Binarystring,但不知道如何反转该过程。
这是我将UTF-8字符串转换为二进制字符串的程序。
package filetobits;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class FileToBits {
public static void main(String[] args) throws IOException, FileNotFoundException {
FileReader inputStream = new FileReader("C:\\FileTesting\\UTF8.txt");
FileWriter outputStream = new FileWriter("C:\\FileTesting\\BinaryStrings.txt");
int c;
while ((c = inputStream.read()) != -1) {
outputStream.write(Integer.toBinaryString(c));
outputStream.write(System.lineSeparator());
}
inputStream.close();
outputStream.close();
}
}
这是我的输入(16个字符):
¼¹¨'I.p
这是我的输出:
1111111111111101 10000 1111111111111101 11111 1111111111111101 100111 1001001 101110 1110000 111100 1111111111111101 1100001 101100 101001 1111111111111101 1111111111111101
我需要帮助将这些二进制字符串转换回单个UTF-8字符串并将其存储在文本文件中。
我通过以下代码实现了我想要的目标:
String str = "";
FileReader inputStream = new FileReader("C:\\FileTesting\\Encrypted.txt");
FileWriter outputStream = new FileWriter("C:\\FileTesting\\EncryptedBin.txt");
int c;
while ((c = inputStream.read()) != -1) {
String s = String.format("%16s", Integer.toBinaryString(c)).replace(' ', '0');
for (int i = 0; i < s.length() / 16; i++) {
int a = Integer.parseInt(s.substring(16 * i, (i + 1) * 16), 2);
str += (char) (a);
}
}
但问题是我无法添加额外的0来使每个二进制字符串长度为16,因为我需要将这些数据存储在图像中(对于我的图像隐写项目)。所以二进制字符串越短越好。
我需要获得上面代码生成的相同输出,但不将每个二进制字符串转换为16的长度。
PS:在角色编码方面,我有点失落。将UTF-8字符存储在windows txt文件中,将它们转换为ANSI或其他东西吗?答案 0 :(得分:0)
一个字节有8位。在第一步中,忽略UTF-8问题,只需用二进制字符串中的数据填充byte []。
当你有一个byte []数据时,可以使用new String(d)创建一个UTF-8字符串(Java字符串默认为UTF-8)。