代码之家  ›  专栏  ›  技术社区  ›  Dragon Creature

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

  •  0
  • Dragon Creature  · 技术社区  · 13 年前

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

    我想知道如何将字符串读取为UTF-7而不是UTF-8。我还注意到,我在花车方面也遇到了类似的问题。C#和Java对它们的处理方式不同吗?如果是,我如何在Java中正确阅读它。

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

    1 回复  |  直到 13 年前
        1
  •  1
  •   SLaks    13 年前

    除非另有说明,否则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,以便了解要读取的字节数。