从二进制文件中读取字符串,编码不同

时间:2012-09-09 20:34:26

标签: c# java android character-encoding io

我正在尝试读取由C#程序创建的Java(android)二进制文件,但是我偶然发现了一个问题。 C#默认使用UTF-7编码二进制文件中的字符串,Java使用UTF-8。这当然意味着字符串没有正确加载。

我很想知道如何将字符串读作UTF-7而不是UTF-8。我也注意到我有一个与浮动类似的问题。 C#和Java是否以不同方式处理它们,如果是这样,我如何在Java中正确读取它。

编辑:我在C#程序中使用BinaryWriter类,在java中使用DataInputStream类。

1 个答案:

答案 0 :(得分:1)

除非另有说明,否则C#使用UTF-8编码。

编辑此处的文档不正确 查看源代码,BinaryWriter使用以下代码将字符串长度写为 7位编码整数

    protected void Write7BitEncodedInt(int value) {
        // Write out an int 7 bits at a time.  The high bit of the byte, 
        // when on, tells reader to continue reading more bytes. 
        uint v = (uint) value;   // support negative numbers
        while (v >= 0x80) { 
            Write((byte) (v | 0x80));
            v >>= 7;
        }
        Write((byte)v); 
    }

您需要将此代码移植到Java,以便找出要读取的字节数。