Merlin的魔力: 字符集[Java编程]
本文“Merlin的魔力: 字符集[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
用数字表示
不怕明说,其实计算机只理解数字.但下面这一点大概就没那么明显 ― 因为计算机只理解数字,所以它们需求用某种情势把数字值映射为呼应的字符,这样才能显示文本.就是这些映射(或 字符集)才使得计算机可以理解文本.比方,就为了这种映射,早期的台式机利用了 ASCII.当一台利用 ASCII 的计算机存储数字 72、101、108 和 112 时,它便知道要显示“Help”这个单词,因为在 ASCII 中,数字 72 是 H 的值、101 是 e 的值、108 是 l 的值、112 是 p 的值.但假如这台计算机是早期的 IBM 大型机(它利用 EBCDIC 而不是 ASCII),“Help”这个单词将用数字 200、133、147 和 151 代表.
字符集底子知识
在向 Java 语言迁移时, java.nio.charset 包中有三个类帮忙举行这种映射: Charset 、 CharsetEncoder 和 CharsetDecoder .这些类彼此配合,这样您便可以先采取一种映射,然后将其转换为另一种映射.在从另一种映射转换为 Java 映射(Unicode)时,您可以利用解码器(decoder).然后,假如您需求从 Java 映射(Unicode)再转换为另一种映射(或转换回本来那种映射)时,您可以利用编码器(encoder).您无法用 java.nio.charset 包在两种非 Unicode 格局之间直接转换,但您可以通过一种中间的 Unicode 格局在两种非 Unicode 格局间举行转换.
在得到一个解码器或编码器之前,您需求得到用于特定映射的 Charset .比方,US-ASCII 是用于 7 位 ASCII 字符集的映射的名称.您只需象下面这样把该名称传送到 Charset 的 forName() 办法中便可:
Charset charset =
Charset.forName("US-ASCII");
一旦有了 Charset ,只需按以下所示恳求 CharsetDecoder 和 CharsetEncoder :
CharsetDecoder decoder =
charset.newDecoder();
CharsetEncoder encoder =
charset.newEncoder();
有理解码器和编码器后,您便可以在差别的字符集之间举行转换了,以下所示:
ByteBuffer bytes = ...;
CharBuffer chars = decoder.decode(bytes);
bytes = encoder.encode(chars);
当然,假如不肯定哪些字符集可用,您需求用下面的语句来询问:
SortedMap map =
Charset.availableCharsets();
然后您将利用特定的解码器把外部字节转换为内部字符.然后,假如需求把数据发送到 Java 代码外,您将利用编码器把内部字符转换为外部字节.至于哪些特定的字符集可用,您的运行时将肯定整个字符集.但每个 Java 编程实现都必须支持下列编码:
US-ASCII:7 位 ASCII
ISO-8859-1:ISO 拉丁字母
UTF-8:8 位 UCS 转换格局
UTF-16BE:16 位 UCS 转换格局,大尾数法字节次序
UTF-16LE:16 位 UCS 转换格局,小尾数法字节次序
UTF-16:16 位 UCS 转换格局,用标志(marker)辨认的字节次序
然后,差别的平台大概支持特定于该平台的额外字符集(比方,在 Windows 平台上,您会发现它支持 Windows-1252 字符集).假如您需求支持其他的字符集,您可以成立自己的字符集.请参阅 java.nio.charset.spi 包中的 CharsetProvider API.
以上是“Merlin的魔力: 字符集[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |