为了账号安全,请及时绑定邮箱和手机立即绑定

在Java中将UTF-8转换为ISO-8859-1-如何使其保持为单字节

在Java中将UTF-8转换为ISO-8859-1-如何使其保持为单字节

小怪兽爱吃肉 2019-10-17 13:59:49
我正在尝试将UTF-8中以Java编码的字符串转换为ISO-8859-1。例如,在字符串“âabcd”中,“â”在ISO-8859-1中表示为E2。在UTF-8中,它表示为两个字节。C3 A2我相信。当我执行getbytes(encoding),然后使用ISO-8859-1编码的字节创建一个新字符串时,我得到两个不同的字符。â。还有其他方法可以使字符保持一致,即abcd吗?
查看完整描述

3 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

如果要处理UTF-16以外的字符编码,则不应使用java.lang.String或char原始语言,而应仅使用byte[]数组或ByteBuffer对象。然后,您可以java.nio.charset.Charset用来在两种编码之间进行转换:


Charset utf8charset = Charset.forName("UTF-8");

Charset iso88591charset = Charset.forName("ISO-8859-1");


ByteBuffer inputBuffer = ByteBuffer.wrap(new byte[]{(byte)0xC3, (byte)0xA2});


// decode UTF-8

CharBuffer data = utf8charset.decode(inputBuffer);


// encode ISO-8559-1

ByteBuffer outputBuffer = iso88591charset.encode(data);

byte[] outputData = outputBuffer.array();


查看完整回答
反对 回复 2019-10-17
?
子衿沉夜

TA贡献1828条经验 获得超3个赞

byte[] iso88591Data = theString.getBytes("ISO-8859-1");

会成功的。从您的描述看来,您似乎正在尝试“存储ISO-8859-1字符串”。Java中的字符串对象始终以UTF-16隐式编码。无法更改该编码。


您可以做的是,尽管可以得到构成其其他编码的字节(使用.getBytes()上面显示的方法)。


查看完整回答
反对 回复 2019-10-17
  • 3 回答
  • 0 关注
  • 841 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信