Java 每次将字节解码为一个字符

Java 每次将字节解码为一个字符,java,utf-8,character-encoding,utf-16,Java,Utf 8,Character Encoding,Utf 16,我有一个表示字符的任意字节块,在任意方案中编码可能是ASCII、UTF-8、UTF-16。我知道编码 我要做的是在字节数组中查找最后一行的位置。我想知道读取最后一个编码后剩余的字节数\n 我在JDK或任何其他库中都找不到任何可以让我将字节数组逐个转换为字符的东西。InputStreamReader以块的形式读取流,而不给我任何指示要读取多少字节来生成一个字符 我是否要做一些可怕的事情来重新编码每个字符以计算其字节长度?您可以尝试类似的方法 CharsetDecoder cd = Char

我有一个表示字符的任意字节块,在任意方案中编码可能是ASCII、UTF-8、UTF-16。我知道编码

我要做的是在字节数组中查找最后一行的位置。我想知道读取最后一个编码后剩余的字节数\n

我在JDK或任何其他库中都找不到任何可以让我将字节数组逐个转换为字符的东西。InputStreamReader以块的形式读取流,而不给我任何指示要读取多少字节来生成一个字符


我是否要做一些可怕的事情来重新编码每个字符以计算其字节长度?

您可以尝试类似的方法

    CharsetDecoder cd = Charset.forName("UTF-8").newDecoder();
    ByteBuffer in = ByteBuffer.wrap(bytes);
    CharBuffer out = CharBuffer.allocate(1);
    int p = 0;
    while (in.hasRemaining()) {
        cd.decode(in, out, true);
        char c = out.array()[0];
        int nBytes = in.position() - p;
        p = in.position();
        out.position(0);
    }

你可以试试这样的

    CharsetDecoder cd = Charset.forName("UTF-8").newDecoder();
    ByteBuffer in = ByteBuffer.wrap(bytes);
    CharBuffer out = CharBuffer.allocate(1);
    int p = 0;
    while (in.hasRemaining()) {
        cd.decode(in, out, true);
        char c = out.array()[0];
        int nBytes = in.position() - p;
        p = in.position();
        out.position(0);
    }

这个怎么样?我看到了那个,但它似乎没有回答我的问题,他们只是每个字符使用2个字节,然后可以使用一个循环和一个映射,支持的编码格式中所有可能字符的映射显示关于这个,我看到了那个,但它似乎没有回答我的问题,他们只是每个字符使用2个字节,然后可以使用一个循环和一个映射,支持的编码格式中所有可能字符的映射此工作非常有效,谢谢!将CharBuffer的限制设置为1也可以一次实现char,并允许您保留转换后的char。如果在上述情况下存在解码错误,则Java7从解码调用返回溢出,即使存在解码错误并且解码器被设置为替换错误。Java8修复了这个问题。它非常有效,谢谢!将CharBuffer的限制设置为1也可以一次实现char,并允许您保留转换后的char。如果在上述情况下存在解码错误,则Java7从解码调用返回溢出,即使存在解码错误并且解码器被设置为替换错误。Java8解决了这个问题。