当前位置:  开发笔记 > 编程语言 > 正文

在java中编码转换

如何解决《在java中编码转换》经验,为你挑选了2个好方法。

是否有任何免费的java库,我可以用它来将一个编码中的字符串转换为其他编码,类似于iconv?我正在使用Java 1.3版.



1> Jon Skeet..:

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

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

请参阅" 网址编码(或:'这些是什么" %20"网址中的代码?') ".


在大多数情况下,我更喜欢新的String(byte [],编码)和String.getBytes(编码),因为它们是简单的单行,而不是更强大但更复杂的Charset API(BTW,仅适用于Java 1.4+).
是的,很遗憾Charset API太复杂了..NET System.Encoding类做得非常好,IMO - 并保持功能不受String限制.

2> VonC..:

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) {
}


Unicode不是编码!UTF-8,UTF-16等.请参阅http://www.joelonsoftware.com/articles/Unicode.html
推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有