gpt4 book ai didi

java - 文件的每个字节都是由字符集中的字符组成的吗?

转载 作者:行者123 更新时间:2023-12-01 17:49:25 26 4
gpt4 key购买 nike

我正在编写一个程序(用Java),它必须删除文件的一半字节,但要按顺序删除,即。删除每个偶数(或奇数)字节。

我使用以下方法来检索所有字节:

byte[] fileContent = Files.readAllBytes(file.toPath());

从文本文件中,使用 System.out.println(fileContent[i]); 它将输出目标字节的相应 ASCII 代码。

我总是得到 ASCII 代码吗?我不知道文件的结构是如何工作的。

最后,我没有成功地通过循环 byte[] fileContent 并跳过 1/2 元素来成功地循环写入新文件。

相反,我从 byte[] fileContent 创建了 char[] fileContentChar ,并从该文件写入。

最佳答案

对“我总是得到 ASCII 代码吗?”的简短回答是:不。您不能对文本文件的字符编码做出任何假设。有多种格式(ASCII、UTF8、UTF16、ISO-8859-1、Unicode 等。请参阅 https://en.wikipedia.org/wiki/Character_encoding ),您需要对文件进行采样以做出文本是否为 7 位 (ASCII) 或 UTF8 等的假设.

char 和 byte 不一样(就位长度而言,取决于平台)。在java中,char是2字节(16位),byte是1字节(8位)。

有一些技巧可以猜测文本文件使用的编码。例如,如果您采样 100 个字节并且从未设置高位,则它可能是 7 位 ASCII ( b & 0x80 )。如果文件以 3 字节前导码/签名(0xEF、0xBB、0xBF)开头,则很可能是 UTF8。 (UTF8 是每个字符 1 到 4 个字节;查看第一个字节的高位。)Java 默认使用 UTF16(2 个字节)。检查此资源以了解更多详细信息 ( http://unicode.org/faq/utf_bom.html )。

祝你好运!

关于java - 文件的每个字节都是由字符集中的字符组成的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52119310/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com