我正在尝试读取由C#程序创建的Java(android)二进制文件,但是我偶然发现了一个问题。 C#默认使用UTF-7编码二进制文件中的字符串,Java使用UTF-8。这当然意味着字符串没有正确加载。
我很想知道如何将字符串读作UTF-7而不是UTF-8。我也注意到我有一个与浮动类似的问题。 C#和Java是否以不同方式处理它们,如果是这样,我如何在Java中正确读取它。
编辑:我在C#程序中使用BinaryWriter类,在java中使用DataInputStream类。
答案 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,以便找出要读取的字节数。