Java - UTF8/16是字符集名称还是字符编码?

use*_*453 2 java character-encoding

我正在开发的应用程序将被西欧和东欧以及美国的人们使用.我正在编码输入并使用UTF-8字符集解码输出.

我的困惑是因为当我使用这个方法String(byte [] bytes,String charsetName)时,我提供UTF-8作为charsetname,当它真的是一个字符编码时.我的默认econding在Eclipse中设置为Cp1252.

这是否意味着,如果在我的Java应用程序中的美国,我使用Cp1252作为我的字符集编码创建一个输出文本文件,而UTF-8作为我的字符集名称,那么欧洲的人们是否能够在我的Java应用程序中读取此文件反之亦然?

Jon*_*eet 11

他们是编码.遗憾的是,当Java真正意味着"编码"时,它会使用"charset",但现在很难解决这个问题:(令人讨厌的是,IANA犯了同样的错误.

实际上,通过Unicode术语,它们可能是最准确的字符编码方案:

字符编码形式加字节序列化.Unicode中有七种字符编码方案:UTF-8,UTF-16,UTF-16BE,UTF-16LE,UTF-32,UTF-32BE和UTF-32LE.

字符编码形式的位置是:

从字符集定义映射到用于表示数据的实际代码单元.

是的,Unicode只定义了七种字符编码形式这一事实使得这更令人困惑.从根本上说,大多数开发人员需要知道的是,Java术语中的"charset"是文本数据(String,char[])和二进制数据(byte[])之间的映射.

  • +1.[java.nio.charset.Charset`的Javadoc](http://docs.oracle.com/javase/1.5.0/docs/api/java/nio/charset/Charset.html)通过"charset"解释"JDK的意思是"16位Unicode代码单元序列和字节序列之间的命名映射". (3认同)
  • 顺便说一下,[RFC 2978](http://www.ietf.org/rfc/rfc2978.txt)解释了这个命名法背后的一些基本原理.它不是Java主义,而是标准主义.(虽然Java通过将字符集应用于*代码单元*而不是*字符*而使其更糟糕.) (2认同)