繁体   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