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

标签 java utf-8 iso-8859-1

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

最佳答案

如果您要处理 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();

关于java - 在 Java 中将 UTF-8 转换为 ISO-8859-1 - 如何将其保持为单字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/655891/

相关文章:

python - unicode和python问题(获取unicode码表)

C# 将 ISO-8859-1 字符转换为实体编号

java - 次要名称节点未启动

java - 与枚举类型混淆

java - Json 使用 Jackson ObjectMapper 和 spring-session 将最终类序列化到 Redis 中

javascript - 如何在 javascript、javaservlets、mysql 和 back 中使用 utf8?

c - PCRE 不匹配 utf8 字符

python - unicode解码的问题

java - Hibernate:错误 'foo' 中的未知列 'field list' - 从一个实体到同一父实体的两个 @ManyToOne 关系