有没有一种简单的方法将字节附加到StringBuffer并指定编码?

gMa*_*ale 11 java byte utf-8 char character-encoding

将字节附加到StringBuffer(即将字节转换为char)并指定使用的字符编码(ASCII,UTF-8等)的最简单方法是什么?

上下文

我想在stringbuffer中添加一个字节.这样做需要将字节转换为char:

myStringBuffer.append((char)nextByte);
Run Code Online (Sandbox Code Playgroud)

但是,上面的代码使用我的机器(MacRoman)的默认字符编码.同时,系统/网络中的其他组件需要UTF-8.所以我需要这样的东西:

try {
    myStringBuffer.append(new String(new Byte[]{nextByte}, "UTF-8"));
} catch (UnsupportedEncodingException e) {
    //handle error
}
Run Code Online (Sandbox Code Playgroud)

坦率地说,这非常难看.

当然,有一个更好的方法(除了将相同的代码分成多行)???????

bma*_*ies 16

简单回答是不'.如果字节是多字节序列的第一个字节怎么办?什么都不会保持国家.

如果您拥有逻辑字符的所有字节,则可以执行以下操作:

sb.append(new String(bytes, charset));
Run Code Online (Sandbox Code Playgroud)

但是如果你有一个字节的UTF-8,你根本无法使用库存类.

构建一个使用java.nio.charset类来实现字节附加的juiced-up StringBuffer并不是非常困难,但它不会是一行或两行代码.

评论表明这里需要一些基本的Unicode知识.

在UTF-8中,'a'是一个字节,'á'是两个字节,'丧'是三个字节,''是四个字节.CharsetDecoder的工作是将这些序列转换为Unicode字符.作为一个字节顺序操作,这显然是一个有状态的过程.

如果您CharsetDecoder为UTF-8 创建一个,则可以ByteBuffer通过此方法一次仅为字节(在a中)提供.UTF-16字符将在输出中累积CharBuffer.