是否有任何免费的java库,我可以用它来将一个编码中的字符串转换为其他编码,类似于iconv
?我正在使用Java 1.3版.
您不需要超出标准库的库 - 只需使用Charset.(您可以使用String构造函数和getBytes方法,但我个人不喜欢只使用字符编码的名称.错别字的空间太大.)
编辑:正如在注释中指出的,您仍然可以使用Charset实例,但易于使用String方法:new String(bytes,charset)和String.getBytes(charset).
请参阅" 网址编码(或:'这些是什么" %20
"网址中的代码?') ".
CharsetDecoder
应该是你在找什么,不是吗?
许多网络协议和文件使用面向字节的字符集(如ISO-8859-1
(ISO-Latin-1
))存储它们的字符.
但是,Java的本机字符编码是统一 UTF16BE(16位UCS转换格式,大端字节顺序).
见Charset
.这并不意味着UTF16
是默认的字符集(即:默认的"十六位Unicode代码单元序列和字节序列之间的映射"):
Java虚拟机的每个实例都有一个默认字符集,它可能是也可能不是标准字符集之一.
[US-ASCII
,ISO-8859-1
又名ISO-LATIN-1
,UTF-8
,UTF-16BE
,UTF-16LE
,UTF-16
]
默认字符集的虚拟机的启动期间所确定,并且通常取决于语言环境和charset正在使用的底层操作系统.
此示例演示如何将a中的ISO-8859-1
编码字节转换ByteBuffer
为a中的字符串,CharBuffer
反之亦然.
// 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) { }