一尘不染

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

java

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


阅读 594

收藏
2020-03-19

共1个答案

一尘不染

如果你要处理UTF-16以外的字符编码,则不应使用java.lang.Stringchar原始语言,而应仅使用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();
2020-03-19