c# - 从二进制文件读取字符串,不同的编码

标签 c# java android character-encoding io

我正在尝试读取由 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/

相关文章:

c# - 获取具有特定条件的两个列表的交集

c# - 将动态字符串渲染为 Razor

java - 无论屏幕方向如何,如何获得正确的方位(磁性方向)?

Java byte[] 返回相同的字符串,即使 byte[] 数组被更改为添加一些填充

java - 在 EditText 中将字符串转换为 double

c# - 自定义连接字符串 EF5,数据库优先

c# - log4net - 记录通过 COM 互操作调用的 dll

java - 如何在Java中将11位十六进制数转换为唯一的11位十进制数?

android - 使用 FFmpeg 裁剪视频会过度增加 tbn 值

android - Font Awesome 4.1.0 在 Cordova android 模拟器中不起作用