关闭

Java字符集

标签: java
382人阅读 评论(0) 收藏 举报

通常而言,把明文的字符序列转换成计算机能理解的二进制序列称为编码,把二进制序列转换成普通人能看懂的明文字符串称为解码。

JDK1.4提供了Charset来处理字节序列和字符序列之间的转换关系,该类包含了用于创建解码器和编码器的方法,还提供了Charset所支持的字符集的方法,Charset类是不可变的。

Charset类提供了一个availableCharset()的静态方法来获取当前JDK所支持的所有字符集,下面小试牛刀

  1. import java.nio.charset.Charset;  
  2. import java.util.SortedMap;  
  3. public class Test {  
  4.     public static void main(String[] args) throws Exception  
  5.     {  
  6.         SortedMap<String,Charset> sm= Charset.availableCharsets();  
  7.         for(String str:sm.keySet())  
  8.         {  
  9.             System.out.println(sm.get(str));  
  10.         }  
  11.     }  
  12. }  
结果如下

  1. Big5  
  2. Big5-HKSCS  
  3. EUC-JP  
  4. EUC-KR  
  5. GB18030  
  6. GB2312  
  7. GBK  
  8. IBM-Thai  
  9. IBM00858  
  10. IBM01140  
  11. IBM01141  
  12. IBM01142  
  13. IBM01143  
  14. IBM01144  
  15. IBM01145  
  16. IBM01146  
  17. IBM01147  
  18. IBM01148  
  19. IBM01149  
  20. IBM037  
  21. IBM1026  
  22. IBM1047  
  23. IBM273  
  24. IBM277  
  25. IBM278  
  26. IBM280  
  27. IBM284  
  28. IBM285  
  29. IBM297  
  30. IBM420  
  31. IBM424  
  32. IBM437  
  33. IBM500  
  34. IBM775  
  35. IBM850  
  36. IBM852  
  37. IBM855  
  38. IBM857  
  39. IBM860  
  40. IBM861  
  41. IBM862  
  42. IBM863  
  43. IBM864  
  44. IBM865  
  45. IBM866  
  46. IBM868  
  47. IBM869  
  48. IBM870  
  49. IBM871  
  50. IBM918  
  51. ISO-2022-CN  
  52. ISO-2022-JP  
  53. ISO-2022-JP-2  
  54. ISO-2022-KR  
  55. ISO-8859-1  
  56. ISO-8859-13  
  57. ISO-8859-15  
  58. ISO-8859-2  
  59. ISO-8859-3  
  60. ISO-8859-4  
  61. ISO-8859-5  
  62. ISO-8859-6  
  63. ISO-8859-7  
  64. ISO-8859-8  
  65. ISO-8859-9  
  66. JIS_X0201  
  67. JIS_X0212-1990  
  68. KOI8-R  
  69. KOI8-U  
  70. Shift_JIS  
  71. TIS-620  
  72. US-ASCII  
  73. UTF-16  
  74. UTF-16BE  
  75. UTF-16LE  
  76. UTF-32  
  77. UTF-32BE  
  78. UTF-32LE  
  79. UTF-8  
  80. windows-1250  
  81. windows-1251  
  82. windows-1252  
  83. windows-1253  
  84. windows-1254  
  85. windows-1255  
  86. windows-1256  
  87. windows-1257  
  88. windows-1258  
  89. windows-31j  
  90. x-Big5-HKSCS-2001  
  91. x-Big5-Solaris  
  92. x-euc-jp-linux  
  93. x-EUC-TW  
  94. x-eucJP-Open  
  95. x-IBM1006  
  96. x-IBM1025  
  97. x-IBM1046  
  98. x-IBM1097  
  99. x-IBM1098  
  100. x-IBM1112  
  101. x-IBM1122  
  102. x-IBM1123  
  103. x-IBM1124  
  104. x-IBM1364  
  105. x-IBM1381  
  106. x-IBM1383  
  107. x-IBM33722  
  108. x-IBM737  
  109. x-IBM833  
  110. x-IBM834  
  111. x-IBM856  
  112. x-IBM874  
  113. x-IBM875  
  114. x-IBM921  
  115. x-IBM922  
  116. x-IBM930  
  117. x-IBM933  
  118. x-IBM935  
  119. x-IBM937  
  120. x-IBM939  
  121. x-IBM942  
  122. x-IBM942C  
  123. x-IBM943  
  124. x-IBM943C  
  125. x-IBM948  
  126. x-IBM949  
  127. x-IBM949C  
  128. x-IBM950  
  129. x-IBM964  
  130. x-IBM970  
  131. x-ISCII91  
  132. x-ISO-2022-CN-CNS  
  133. x-ISO-2022-CN-GB  
  134. x-iso-8859-11  
  135. x-JIS0208  
  136. x-JISAutoDetect  
  137. x-Johab  
  138. x-MacArabic  
  139. x-MacCentralEurope  
  140. x-MacCroatian  
  141. x-MacCyrillic  
  142. x-MacDingbat  
  143. x-MacGreek  
  144. x-MacHebrew  
  145. x-MacIceland  
  146. x-MacRoman  
  147. x-MacRomania  
  148. x-MacSymbol  
  149. x-MacThai  
  150. x-MacTurkish  
  151. x-MacUkraine  
  152. x-MS932_0213  
  153. x-MS950-HKSCS  
  154. x-MS950-HKSCS-XP  
  155. x-mswin-936  
  156. x-PCK  
  157. x-SJIS_0213  
  158. x-UTF-16LE-BOM  
  159. X-UTF-32BE-BOM  
  160. X-UTF-32LE-BOM  
  161. x-windows-50220  
  162. x-windows-50221  
  163. x-windows-874  
  164. x-windows-949  
  165. x-windows-950  
  166. x-windows-iso2022jp  
一旦知道了字符集的别名之后,程序就可以调用Charset的forName()来创建对应的Charset对象,forName()方法的参数就是相应字符集的别名

Charset cs=Charset.forName("ISO-8859-1");

Charset cs=Charset.forName("GBK");

获得了Charset对象的之后,就可已通过该对象的newDecode()和newEncode()这两个方法分别返回CharsetDecode和CharsetEncode对象,代表该Charset的解码器和编码器,调用CharsetDecode的decode()方法就可以将ByteBuffer转换成CharBuffer,调用CharsetEncode就可以将CharBuffer或String转换成ByteBuffer。

  1. import java.nio.ByteBuffer;  
  2. import java.nio.CharBuffer;  
  3. import java.nio.charset.Charset;  
  4. import java.nio.charset.CharsetDecoder;  
  5. import java.nio.charset.CharsetEncoder;  
  6. public class Test {  
  7.     public static void main(String[] args) throws Exception  
  8.     {  
  9.         Charset cs=Charset.forName("GBK");  
  10.         CharsetDecoder cd=cs.newDecoder();  
  11.         CharsetEncoder ce=cs.newEncoder();  
  12.         CharBuffer cb=CharBuffer.allocate(6);  
  13.         cb.put("张");  
  14.         cb.put("译");  
  15.         cb.put("成");  
  16.         cb.flip();  
  17.         ByteBuffer bb=ce.encode(cb);  
  18.         for(int i=0;i<bb.capacity();i++)  
  19.         {  
  20.             System.out.println(bb.get(i));  
  21.         }  
  22.         System.out.println(cd.decode(bb));  
  23.     }  
  24. }  

Charset还提供了一下方法处理编码问题

CharBuffer decode(ByteBuffer bb)

ByteBuffer encode(CharBuffer cb)

ByteBuffer encode(String str)

我就不解释这三个方法了,估计都能估计出来

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:108555次
    • 积分:3076
    • 等级:
    • 排名:第11713名
    • 原创:208篇
    • 转载:14篇
    • 译文:0篇
    • 评论:5条
    最新评论