我正在尝试读取由 C# 程序创建的 Java (android) 二进制文件,但是我遇到了一个问题。 C# 默认使用 UTF-7 对二进制文件中的字符串进行编码,Java 使用 UTF-8。这当然意味着字符串没有正确加载。
我想知道如何将字符串读取为 UTF-7 而不是 UTF-8。我还注意到我的 float 也遇到了类似的问题。 C# 和 Java 处理它们的方式不同吗?如果是的话,我如何在 Java 中正确读取它。
编辑:我在 C# 程序中使用 BinaryWriter 类,在 java 中使用 DataInputStream 类。
最佳答案
除非另有说明,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 才能找出要读取的字节数。
关于c# - 从二进制文件读取字符串,不同的编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12342739/