通常而言,把明文的字符序列转换成计算机能理解的二进制序列称为编码,把二进制序列转换成普通人能看懂的明文字符串称为解码。
JDK1.4提供了Charset来处理字节序列和字符序列之间的转换关系,该类包含了用于创建解码器和编码器的方法,还提供了Charset所支持的字符集的方法,Charset类是不可变的。
Charset类提供了一个availableCharset()的静态方法来获取当前JDK所支持的所有字符集,下面小试牛刀
import java.nio.charset.Charset;
import java.util.SortedMap;
public class Test {
public static void main(String[] args) throws Exception
{
SortedMap<String,Charset> sm= Charset.availableCharsets();
for(String str:sm.keySet())
{
System.out.println(sm.get(str));
}
}
}
结果如下
Big5
Big5-HKSCS
EUC-JP
EUC-KR
GB18030
GB2312
GBK
IBM-Thai
IBM00858
IBM01140
IBM01141
IBM01142
IBM01143
IBM01144
IBM01145
IBM01146
IBM01147
IBM01148
IBM01149
IBM037
IBM1026
IBM1047
IBM273
IBM277
IBM278
IBM280
IBM284
IBM285
IBM297
IBM420
IBM424
IBM437
IBM500
IBM775
IBM850
IBM852
IBM855
IBM857
IBM860
IBM861
IBM862
IBM863
IBM864
IBM865
IBM866
IBM868
IBM869
IBM870
IBM871
IBM918
ISO-2022-CN
ISO-2022-JP
ISO-2022-JP-2
ISO-2022-KR
ISO-8859-1
ISO-8859-13
ISO-8859-15
ISO-8859-2
ISO-8859-3
ISO-8859-4
ISO-8859-5
ISO-8859-6
ISO-8859-7
ISO-8859-8
ISO-8859-9
JIS_X0201
JIS_X0212-1990
KOI8-R
KOI8-U
Shift_JIS
TIS-620
US-ASCII
UTF-16
UTF-16BE
UTF-16LE
UTF-32
UTF-32BE
UTF-32LE
UTF-8
windows-1250
windows-1251
windows-1252
windows-1253
windows-1254
windows-1255
windows-1256
windows-1257
windows-1258
windows-31j
x-Big5-HKSCS-2001
x-Big5-Solaris
x-euc-jp-linux
x-EUC-TW
x-eucJP-Open
x-IBM1006
x-IBM1025
x-IBM1046
x-IBM1097
x-IBM1098
x-IBM1112
x-IBM1122
x-IBM1123
x-IBM1124
x-IBM1364
x-IBM1381
x-IBM1383
x-IBM33722
x-IBM737
x-IBM833
x-IBM834
x-IBM856
x-IBM874
x-IBM875
x-IBM921
x-IBM922
x-IBM930
x-IBM933
x-IBM935
x-IBM937
x-IBM939
x-IBM942
x-IBM942C
x-IBM943
x-IBM943C
x-IBM948
x-IBM949
x-IBM949C
x-IBM950
x-IBM964
x-IBM970
x-ISCII91
x-ISO-2022-CN-CNS
x-ISO-2022-CN-GB
x-iso-8859-11
x-JIS0208
x-JISAutoDetect
x-Johab
x-MacArabic
x-MacCentralEurope
x-MacCroatian
x-MacCyrillic
x-MacDingbat
x-MacGreek
x-MacHebrew
x-MacIceland
x-MacRoman
x-MacRomania
x-MacSymbol
x-MacThai
x-MacTurkish
x-MacUkraine
x-MS932_0213
x-MS950-HKSCS
x-MS950-HKSCS-XP
x-mswin-936
x-PCK
x-SJIS_0213
x-UTF-16LE-BOM
X-UTF-32BE-BOM
X-UTF-32LE-BOM
x-windows-50220
x-windows-50221
x-windows-874
x-windows-949
x-windows-950
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。
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;
public class Test {
public static void main(String[] args) throws Exception
{
Charset cs=Charset.forName("GBK");
CharsetDecoder cd=cs.newDecoder();
CharsetEncoder ce=cs.newEncoder();
CharBuffer cb=CharBuffer.allocate(6);
cb.put("张");
cb.put("译");
cb.put("成");
cb.flip();
ByteBuffer bb=ce.encode(cb);
for(int i=0;i<bb.capacity();i++)
{
System.out.println(bb.get(i));
}
System.out.println(cd.decode(bb));
}
}
Charset还提供了一下方法处理编码问题
CharBuffer decode(ByteBuffer bb)
ByteBuffer encode(CharBuffer cb)
ByteBuffer encode(String str)
我就不解释这三个方法了,估计都能估计出来
分享到:
相关推荐
java字符集编码乱码详解
Java字符集和编码 ,Java字符集和编码Java字符集和编码
java字符集
java 字符集编码转换,时间格式化,数字判断等,java文件
java 字符集的解码方法 java 字符集的解码方法
JAVA字符集.doc,希望与大家分享
2.java字符集
Java字符集编码应用探讨
java字符集 家uygwekhdec
Java字符集[定义].pdf
字符集编码问题字符集编码问题字符集编码问题
配方详细介绍了Java中的字符集,以及各种字符集的特征。
NULL 博文链接:https://joard.iteye.com/blog/403031
本文主要介绍字符集编码基本知识,系统的介绍了字符集各种类型。 字符集常见问题和解决方案。
本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等。
java 获取文件字符集编码依赖包
该程序可以实现不同字符集的转换,比如从GBK到UTF8 本程序会递归地处理本目录及其子目录中的后缀为指定后缀的文件 由于功能不完善,最好只对一个目录执行一次操作,而且在输入字符集时要仔细
不需要关心接受的字符串编码是UTF_8还是GBK,还是ios-8859-1,自动转换为utf-8编码格式,无需判断字符串原有编码,用法://处理编码String newStr = GetEncode.transcode(oldStr);
JAVA字符集过滤器函数代码