如何在java中将二进制字符串转换为UTF-8字符串?

时间:2017-01-28 12:39:27

标签: java file utf-8 binary encode

我正在做一个项目,要求我将存储在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或其他东西吗?

1 个答案:

答案 0 :(得分:0)

一个字节有8位。在第一步中,忽略UTF-8问题,只需用二进制字符串中的数据填充byte []。

当你有一个byte []数据时,可以使用new String(d)创建一个UTF-8字符串(Java字符串默认为UTF-8)。