Linux文件大小,java.nio和CP1252多字节字符集

时间:2018-03-13 11:22:58

标签: linux character-encoding codepages java.nio.file cp1252

我有一个Cp1252文件,我想读作二进制文件。

来自终端的

ls -al显示其大小为10个字节。

但是这个java片段报告了18个字节:

Path path = Paths.get(lfile);
SeekableByteChannel sbc = Files.newByteChannel(path, StandardOpenOption.READ);
long size = sbc.size();

该文件包含6个ascii字符+ 4个Cp1252字符。我的理解是,10个字节是文件系统上此文件的正确大小。 还有一个细节:尝试使用以下方法读取文件内容时:

byte[] fileContents = Files.readAllBytes(path);

我得到18个字节,因为每个Cp1252字符加载为3个字节。在文件中我有不同的Cp1252字符,缓冲区显示它们都是相同的 - 这肯定是不正确的。

有两个问题困扰我:

  1. 此文件实际占用文件系统的字节数。

  2. 假设它长10个字节,如何将其读作“原始”

  3. 更新 我尝试使用一个小的C程序,结果如预期的那样:从文件中读取10个字符,其中4个是Cp1252,它们都具有不同的值。

    int main() {
        char fileName[200] = "test.x10";
        FILE *fp = fopen(fileName, "r");
        while(1) {
            int c = fgetc(fp);
            if( feof(fp) )
                break ;
            printf("%i ", c);
        }
        fclose(fp);
    }
    

    更新2:

    test.x10包含Cp1252字符:aöaäaüaßbb

    上面给出的C代码打印出来:97 246 97 228 97 252 97 223 98 98

    Files.readAllBytes读取:97 239 191 189 97 239 191 189 97 239 191 189 97 239 191 189 98 98

    这是hexdump:

    hexdump -C test.x10
    00000000  61 f6 61 e4 61 fc 61 df  62 62                   |a.a.a.a.bb|
    

0 个答案:

没有答案