Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAVA Files.readAllBytes()而不更改字符集_Java_Encoding_Utf 8_Character Encoding - Fatal编程技术网

JAVA Files.readAllBytes()而不更改字符集

JAVA Files.readAllBytes()而不更改字符集,java,encoding,utf-8,character-encoding,Java,Encoding,Utf 8,Character Encoding,我有一个文件,其中包含一些我想更改的纯文本。然而,大多数文件对人类来说是不可读的 我最初使用UTF-8作为字符集,它找到了我想要替换的文本,正确地替换/更改了它,并将所有这些内容写入了一个新文件。但我遇到了两个问题:文件的大小几乎是原始文件的两倍,而且其他应用程序无法读取。然后,我用ISO-8859-1尝试了同样的方法,结果是文件大小比UTF-8更接近原始文件,但打开文件并与平面图文本编辑器进行比较后,我发现ISO-8859-1也“误解了”,因此向文件添加了一些字节。对于能够打开原始文件(MP4

我有一个文件,其中包含一些我想更改的纯文本。然而,大多数文件对人类来说是不可读的

我最初使用UTF-8作为字符集,它找到了我想要替换的文本,正确地替换/更改了它,并将所有这些内容写入了一个新文件。但我遇到了两个问题:文件的大小几乎是原始文件的两倍,而且其他应用程序无法读取。然后,我用ISO-8859-1尝试了同样的方法,结果是文件大小比UTF-8更接近原始文件,但打开文件并与平面图文本编辑器进行比较后,我发现ISO-8859-1也“误解了”,因此向文件添加了一些字节。对于能够打开原始文件(MP4)的应用程序,该文件也无法读取

我所做的是:

       String content;
        try {
            content = new String(Files.readAllBytes(path), ("ISO-8859-1"));
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        content = content.replaceAll("\"enabled\": false", "\"enabled\": true");
        try {
            Files.write(pathDestination, content.getBytes("ISO-8859-1"));
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
如果我让我的应用程序在没有任何字符集的情况下“逐字节”读取它,我很确定我可以“保留”完全相同的文件,但是我还必须将所有字节转换为UTF-8文本块,以便查找并替换该文件中的纯文本,在将其再次转换为字节数据之前,将所有这些数据解析为新文件。一定有更好的解决办法

举个例子:

!!7SŸŸ成为

!/(包括连字符)为了以防万一,我上传了一个截图


如果文件只包含一些纯文本,并且其中大部分不打算作为字符读取,则您应该只将文件中包含纯文本的部分转换为
字符串。将任意非文本字节转换为
字符串
确实不是一个好主意

如果我让我的应用程序在没有任何字符集的情况下“逐字节”读取它,我很确定我可以“保留”完全相同的文件,但是我还必须将所有字节转换为UTF-8文本块,以便查找并替换该文件中的纯文本,在将其再次转换为字节数据之前,将所有这些数据解析为新文件。一定有更好的解决办法

那么,您应该注意文件的实际格式。完全有可能是一些随机的字节块——视频或音频,如果文件如您所说是MP4的话——恰好与您要查找的文本匹配。这并不意味着您应该更改这些字节


如果您愿意接受这种风险,那么也许您应该将搜索文本转换为字节并搜索这些字节,而不是将正在搜索的字节转换为文本。这意味着您不能使用
replaceAll
;您必须实现自己的字节替换实现。不过,这可能更正确。

如果在回写后大小翻了一倍,听起来就像是在用UTF-16回写。如果原稿是UTF-8格式的,只要用UTF-8读写就行了。我将Files.readAllBytes()和Files.write()都设置为UTF-8格式,这是一个很好的猜测,谢谢你的回答,你是对的,我正在搜索的文本实际上可能隐藏在其他地方,但是文本大约有300个字符长,看起来如下:>>>>嘿,测试文本“一些东西”0.004启用了0.4111,那么也许你应该将搜索文本转换为字节并搜索那些字节,而不是将正在搜索的字节转换为文本。