我正在尝试将UTF-8中Java编码的字符串转换为ISO-8859-1。例如,在字符串“âabcd”中,“â”在ISO-8859-1中表示为E2。在UTF-8中,它表示为两个字节。C3 A2我相信。当我执行getbytes(encoding),然后使用ISO-8859-1编码的字节创建一个新字符串时,我得到两个不同的字符。â。还有其他方法可以使字符保持一致,即abcd吗?
如果你要处理UTF-16以外的字符编码,则不应使用java.lang.String或char原始语言,而应仅使用byte[]数组或ByteBuffer对象。然后,你可以java.nio.charset.Charset用来在两种编码之间进行转换:
java.lang.String
char
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();