如何将 java 中的二进制字符串转换为 UTF-8 字符串?
How to convert a Binary String to UTF-8 String in java?
我正在做一个项目,需要我将存储在 windows 文本文件中的 UTF-8 字符串转换为连续的二进制字符串,并将其存储在 windows 文本文件中。
然后读取此二进制字符串并将其转换回原始 UTF-8 字符串并将其存储在文本文件中。
我将 UTF-8 字符串转换为二进制字符串,但不知道如何反转该过程。
这是我将 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 或其他格式?
一个字节有8位。第一步,忽略 UTF-8 问题,只需用二进制字符串中的数据填充一个 byte[]。
当你有一个 byte[] 数据时,你可以使用 new String(d) 创建一个 UTF-8 字符串(Java 字符串默认为 UTF-8)。
我正在做一个项目,需要我将存储在 windows 文本文件中的 UTF-8 字符串转换为连续的二进制字符串,并将其存储在 windows 文本文件中。 然后读取此二进制字符串并将其转换回原始 UTF-8 字符串并将其存储在文本文件中。 我将 UTF-8 字符串转换为二进制字符串,但不知道如何反转该过程。
这是我将 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 或其他格式?
一个字节有8位。第一步,忽略 UTF-8 问题,只需用二进制字符串中的数据填充一个 byte[]。
当你有一个 byte[] 数据时,你可以使用 new String(d) 创建一个 UTF-8 字符串(Java 字符串默认为 UTF-8)。