java构造字符缓冲区_字节缓冲区,字符缓冲区,字符串和字符集

我想清理字符,字符序列根据字符集的表示形式,以及如何在Java中将字符集转换为另一个字符集。我有一些困难。字节缓冲区,字符缓冲区,字符串和字符集

例如,

ByteBuffer bybf = ByteBuffer.wrap("Olé".getBytes());

我的理解是:

字符串总是存储在Java的UTF-16字节序列(每个字符2个字节,大端)

getBytes()结果是这个UTF-16字节序列相同

wrap()保持这个序列因此

bybf是字符串的UTF-16大端表示Olé

因此,在该代码: ​​

decode()应

解释bybf作为UTF-16串表示

将其“转换”为原始字符串Olé。

实际上没有字节应该改变,因为一切都是UTF-16存储的,而UTF-16 Charset应该是一种“中性运算符”。但结果打印为:

??

这怎么可能?

其他问题:对于正确地转换,似乎Charset.decode(ByteBuffer bb)要求bb是一个串的UTF-16大端字节序列图像。 这是正确的吗?

编辑:从提供的答案,我做了一些测试,打印ByteBuffer内容,并通过对其进行解码获得的chars。字节[使用= "Olé".getBytes(charsetName)]编码打印在第一行组,其他行是通过解码返回字节[用Charset#decode(ByteBuffer)]与各种Charset获得的字符串。

我还确认在Windows 7计算机上将字符串存储到byte[]的默认编码为windows-1252(除非字符串包含需要UTF-8的字符)。

Default VM encoding: windows-1252

Sample string: "Olé"

getBytes() no CS provided : 79 108 233

Decoded as windows-1252: Olé

Decoded as UTF-16: ??

getBytes with windows-1252: 79 108 233

Decoded as windows-1252: Olé

getBytes with UTF-8: 79 108 195 169

Decoded as UTF-8: Olé

getBytes with UTF-16: 254 255 0 79 0 108 0 233

Decoded as UTF-16: Olé (254-255 is an encoding tag)

2014-06-29

mins

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值