在 java 中编码转换

2022-09-01 09:28:21

有没有免费的java库,我可以用来将一种编码中的字符串转换为其他编码,比如iconv?我使用的是 Java 版本 1.3。


答案 1

你不需要一个超出标准库的库 - 只需使用Charset。(你可以只使用 String 构造函数和 getBytes 方法,但就我个人而言,我不喜欢只使用字符编码的名称。错别字的空间太大了。

编辑:正如注释中指出的那样,您仍然可以使用Charset实例,但可以使用String方法:new String(bytes,charset)String.getBytes(charset)

请参阅“URL 编码(或:URL 中的”%20“代码是什么?')”。


答案 2

CharsetDecoder应该是你正在寻找的,不是吗?

许多网络协议和文件使用面向字节的字符集(如 ())存储其字符。
但是,Java的本机字符编码是Unicode UTF16BE(十六位UCS转换格式,大端字节顺序)。ISO-8859-1ISO-Latin-1

请参阅字符集。这并不意味着是默认字符集(即:默认的“十六位Unicode代码单位序列与字节序列之间的映射”):UTF16

Java 虚拟机的每个实例都有一个缺省字符集,该字符集可能是也可能不是标准字符集之一。
[,又名 、 、 、 、 ]
默认字符集是在虚拟机启动期间确定的,通常取决于基础操作系统使用的区域设置和字符集。US-ASCIIISO-8859-1ISO-LATIN-1UTF-8UTF-16BEUTF-16LEUTF-16

此示例演示如何将 a 中的编码字节转换为 a 中的字符串,反之亦然。ISO-8859-1ByteBufferCharBuffer

// Create the encoder and decoder for ISO-8859-1
Charset charset = Charset.forName("ISO-8859-1");
CharsetDecoder decoder = charset.newDecoder();
CharsetEncoder encoder = charset.newEncoder();

try {
    // Convert a string to ISO-LATIN-1 bytes in a ByteBuffer
    // The new ByteBuffer is ready to be read.
    ByteBuffer bbuf = encoder.encode(CharBuffer.wrap("a string"));

    // Convert ISO-LATIN-1 bytes in a ByteBuffer to a character ByteBuffer and then to a string.
    // The new ByteBuffer is ready to be read.
    CharBuffer cbuf = decoder.decode(bbuf);
    String s = cbuf.toString();
} catch (CharacterCodingException e) {
}