java - 从使用 .net 编写的文件中读取字符

标签 java android .net character-encoding

我正在尝试使用 java 从使用 .net binaryWriter 编写的文件中读取字符串。

我认为问题在于 .net 二进制编写器为其字符串使用了某种 7 位格式。通过在线研究,我发现这段代码的功能应该类似于二进制读取器的 readString() 方法。这是在我的扩展 DataInputStream 的 CSDataInputStream 类中。

public String readStringCS()  throws IOException {
    int stringLength = 0;
    boolean stringLengthParsed = false;
    int step = 0;
    while(!stringLengthParsed) {
        byte part = readByte();
        stringLengthParsed = (((int)part >> 7) == 0);
        int partCutter = part & 127;
        part = (byte)partCutter;
        int toAdd = (int)part << (step*7);
        stringLength += toAdd;
        step++;
    }
    char[] chars = new char[stringLength];
    for(int i = 0; i < stringLength; i++) {
        chars[i] = readChar();
    }
    return new String(chars);
}

第一部分似乎有效,因为它返回了正确数量的字符 (7)。但是当它读取字符时,它们都是中文!我很确定问题出在 DataInputStream.readChar() 但我不知道为什么它不起作用......我什至尝试过使用

Character.reverseBytes(readChar());

读取字符以查看是否可行,但它只会返回不同的汉字。

也许我需要模仿 .net 读取字符的方式?我该怎么做?

还有什么我想念的吗?

谢谢。

最佳答案

好的,您已经通过发音正确地解析了长度 - 但您随后将其视为以字符为单位的长度。据我从文档中得知,它的长度是字节

所以你应该把数据读入一个合适长度的byte[],然后使用:

return new String(bytes, encoding);

其中 encoding 是基于从 .NET 编写的任何内容的适当编码...它将默认为 UTF-8,但可以将其指定为其他内容。

顺便说一句,我个人不会扩展DataInputStream - 我会编写它,即让你的类型或方法获取一个DataInputStream(或者可能只是获取InputStream并将其包装在一个DataInputStream中)。一般来说,根据我的经验,如果您更喜欢组合而不是继承,它可以使代码更清晰、更易于维护。

关于java - 从使用 .net 编写的文件中读取字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7346809/

相关文章:

android - 如何获取 arrayList 的第一个元素并在 TextView 中查看

c# - 错误! (使用来自 C# 的 Excel 命名范围)

c# - WPF:Prism 对小型应用程序来说是否过分杀伤力?

java - 如何从 servlet 内部转发到 web.xml 路径?

Java Swing 布局和菜单

java - Eclipse 和未经检查的转换警告不应该出现

c# - 获取包含枚举值的整数表示的字符串

java - 使用 Spring Boot、Spring Security 和 React 时发生 CORS 错误

android - 在android中的viewmodel中扭曲MVP演示者?

java - Kotlin - list 合并失败 : Attribute application@appComponentFactory