![](/img/trans.png)
[英]How to parse String as Binary and convert it to UTF-8 equivalent in Java?
[英]How to convert a Binary String to UTF-8 String in java?
我正在做一個項目,要求我將存儲在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個字符):
¼¹'Ip
這是我的輸出:
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:關於字符編碼,我有點迷失。 是在Windows txt文件中存儲UTF-8字符,將其轉換為ANSI還是其他?
一個字節有8位。 第一步,忽略UTF-8問題,只需將二進制字符串中的數據填充到byte []中即可。
當具有byte []數據時,可以使用新的String(d)創建一個UTF-8字符串(Java字符串默認為UTF-8)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.