簡體   English   中英

如何在Java中將二進制字符串轉換為UTF-8字符串?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM