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

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



小怪兽爱吃肉
浏览 843回答 3
3回答

米琪卡哇伊

如果要处理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-8CharBuffer data = utf8charset.decode(inputBuffer);// encode ISO-8559-1ByteBuffer outputBuffer = iso88591charset.encode(data);byte[] outputData = outputBuffer.array();

子衿沉夜

byte[] iso88591Data = theString.getBytes("ISO-8859-1");会成功的。从您的描述看来,您似乎正在尝试“存储ISO-8859-1字符串”。Java中的字符串对象始终以UTF-16隐式编码。无法更改该编码。您可以做的是,尽管可以得到构成其其他编码的字节(使用.getBytes()上面显示的方法)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java