字符编码

查看支持哪些字符编码:

package com.nio;

import java.nio.charset.Charset;
import java.util.Map;
import java.util.Set;
import java.util.SortedMap;

/**
 * 字符集:charset
 * 编码:字符串->字节数组
 * 解码:字节数组->字符串
 */
public class TestCharset {
    public static void main(String[] args) {
        //查看Charset支持的字符编码
        SortedMap<String, Charset> map = Charset.availableCharsets();
        Set<Map.Entry<String, Charset>> entries = map.entrySet();
        for (Map.Entry<String, Charset> entry : entries) {
            System.out.println(entry.getKey()+"="+entry.getValue());
        }
    }
}

  

运行结果:

 

Big5=Big5
Big5-HKSCS=Big5-HKSCS
CESU-8=CESU-8
EUC-JP=EUC-JP
EUC-KR=EUC-KR
GB18030=GB18030
GB2312=GB2312
GBK=GBK
IBM-Thai=IBM-Thai
IBM00858=IBM00858
IBM01140=IBM01140
IBM01141=IBM01141
IBM01142=IBM01142
IBM01143=IBM01143
IBM01144=IBM01144
IBM01145=IBM01145
IBM01146=IBM01146
IBM01147=IBM01147
IBM01148=IBM01148
IBM01149=IBM01149
IBM037=IBM037
IBM1026=IBM1026
IBM1047=IBM1047
IBM273=IBM273
IBM277=IBM277
IBM278=IBM278
IBM280=IBM280
IBM284=IBM284
IBM285=IBM285
IBM290=IBM290
IBM297=IBM297
IBM420=IBM420
IBM424=IBM424
IBM437=IBM437
IBM500=IBM500
IBM775=IBM775
IBM850=IBM850
IBM852=IBM852
IBM855=IBM855
IBM857=IBM857
IBM860=IBM860
IBM861=IBM861
IBM862=IBM862
IBM863=IBM863
IBM864=IBM864
IBM865=IBM865
IBM866=IBM866
IBM868=IBM868
IBM869=IBM869
IBM870=IBM870
IBM871=IBM871
IBM918=IBM918
ISO-2022-CN=ISO-2022-CN
ISO-2022-JP=ISO-2022-JP
ISO-2022-JP-2=ISO-2022-JP-2
ISO-2022-KR=ISO-2022-KR
ISO-8859-1=ISO-8859-1
ISO-8859-13=ISO-8859-13
ISO-8859-15=ISO-8859-15
ISO-8859-2=ISO-8859-2
ISO-8859-3=ISO-8859-3
ISO-8859-4=ISO-8859-4
ISO-8859-5=ISO-8859-5
ISO-8859-6=ISO-8859-6
ISO-8859-7=ISO-8859-7
ISO-8859-8=ISO-8859-8
ISO-8859-9=ISO-8859-9
JIS_X0201=JIS_X0201
JIS_X0212-1990=JIS_X0212-1990
KOI8-R=KOI8-R
KOI8-U=KOI8-U
Shift_JIS=Shift_JIS
TIS-620=TIS-620
US-ASCII=US-ASCII
UTF-16=UTF-16
UTF-16BE=UTF-16BE
UTF-16LE=UTF-16LE
UTF-32=UTF-32
UTF-32BE=UTF-32BE
UTF-32LE=UTF-32LE
UTF-8=UTF-8
windows-1250=windows-1250
windows-1251=windows-1251
windows-1252=windows-1252
windows-1253=windows-1253
windows-1254=windows-1254
windows-1255=windows-1255
windows-1256=windows-1256
windows-1257=windows-1257
windows-1258=windows-1258
windows-31j=windows-31j
x-Big5-HKSCS-2001=x-Big5-HKSCS-2001
x-Big5-Solaris=x-Big5-Solaris
x-euc-jp-linux=x-euc-jp-linux
x-EUC-TW=x-EUC-TW
x-eucJP-Open=x-eucJP-Open
x-IBM1006=x-IBM1006
x-IBM1025=x-IBM1025
x-IBM1046=x-IBM1046
x-IBM1097=x-IBM1097
x-IBM1098=x-IBM1098
x-IBM1112=x-IBM1112
x-IBM1122=x-IBM1122
x-IBM1123=x-IBM1123
x-IBM1124=x-IBM1124
x-IBM1166=x-IBM1166
x-IBM1364=x-IBM1364
x-IBM1381=x-IBM1381
x-IBM1383=x-IBM1383
x-IBM300=x-IBM300
x-IBM33722=x-IBM33722
x-IBM737=x-IBM737
x-IBM833=x-IBM833
x-IBM834=x-IBM834
x-IBM856=x-IBM856
x-IBM874=x-IBM874
x-IBM875=x-IBM875
x-IBM921=x-IBM921
x-IBM922=x-IBM922
x-IBM930=x-IBM930
x-IBM933=x-IBM933
x-IBM935=x-IBM935
x-IBM937=x-IBM937
x-IBM939=x-IBM939
x-IBM942=x-IBM942
x-IBM942C=x-IBM942C
x-IBM943=x-IBM943
x-IBM943C=x-IBM943C
x-IBM948=x-IBM948
x-IBM949=x-IBM949
x-IBM949C=x-IBM949C
x-IBM950=x-IBM950
x-IBM964=x-IBM964
x-IBM970=x-IBM970
x-ISCII91=x-ISCII91
x-ISO-2022-CN-CNS=x-ISO-2022-CN-CNS
x-ISO-2022-CN-GB=x-ISO-2022-CN-GB
x-iso-8859-11=x-iso-8859-11
x-JIS0208=x-JIS0208
x-JISAutoDetect=x-JISAutoDetect
x-Johab=x-Johab
x-MacArabic=x-MacArabic
x-MacCentralEurope=x-MacCentralEurope
x-MacCroatian=x-MacCroatian
x-MacCyrillic=x-MacCyrillic
x-MacDingbat=x-MacDingbat
x-MacGreek=x-MacGreek
x-MacHebrew=x-MacHebrew
x-MacIceland=x-MacIceland
x-MacRoman=x-MacRoman
x-MacRomania=x-MacRomania
x-MacSymbol=x-MacSymbol
x-MacThai=x-MacThai
x-MacTurkish=x-MacTurkish
x-MacUkraine=x-MacUkraine
x-MS932_0213=x-MS932_0213
x-MS950-HKSCS=x-MS950-HKSCS
x-MS950-HKSCS-XP=x-MS950-HKSCS-XP
x-mswin-936=x-mswin-936
x-PCK=x-PCK
x-SJIS_0213=x-SJIS_0213
x-UTF-16LE-BOM=x-UTF-16LE-BOM
X-UTF-32BE-BOM=X-UTF-32BE-BOM
X-UTF-32LE-BOM=X-UTF-32LE-BOM
x-windows-50220=x-windows-50220
x-windows-50221=x-windows-50221
x-windows-874=x-windows-874
x-windows-949=x-windows-949
x-windows-950=x-windows-950
x-windows-iso2022jp=x-windows-iso2022jp

 

  

编码解码小案例:

package com.nio;

import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.CharacterCodingException;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;

/**
 * 字符集
 * 编码和解码的小案例
 */
public class TestCharsetDemo {
    public static void main(String[] args) throws CharacterCodingException {
        Charset cs1 = Charset.forName("GBK");
        //获取解码器
        CharsetEncoder ce = cs1.newEncoder();
        //获取解码器
        CharsetDecoder cd = cs1.newDecoder();
        CharBuffer cBuf = CharBuffer.allocate(1024);
        cBuf.put("张家口加油!");
        cBuf.flip();

        //编码
        ByteBuffer bBuf = ce.encode(cBuf);
        for (int i=0;i<12;i++) {
            System.out.println(bBuf.get());
        }

        //解码
        bBuf.flip();
        CharBuffer cBuf2 = cd.decode(bBuf);
        System.out.println(cBuf2.toString());

        //解码 使用utf-8进行解码
        Charset cs2 = Charset.forName("UTF-8");
        bBuf.flip();
        CharBuffer cBuf3 = cs2.decode(bBuf);
        System.out.println(cBuf3.toString());

    }
}

  

运行结果:

 

-43
-59
-68
-46
-65
-38
-68
-45
-45
-51
-93
-95
张家口加油!
�żҿڼ��ͣ�

 

  

由此可见,当编码和解码的方式不同的时候,会出现乱码。这在实际项目开发过程中一定要注意。

 

当客户端向服务端发送一个读写请求的时候,服务端无法判断读写请求中信息真实有效的时候,就会陷入阻塞状态。

 

 

原文地址:https://www.cnblogs.com/dongyaotou/p/14414224.html