ASCII 单字节128个编码
ISO-8859-1 对ASCII的扩展,单字节256编码
GB2312 双字节编码,支持6763个汉字
GBK 双字节编码,GB2312的增强版
UTF-16 Unicode统一编码,定长双字节编码,简单但浪费空间
UTF-8 Unicode统一编码,不定长字节编码
不设置charset,默认应用系统设置的编码,这样很容易造成乱码
文件write时编码
FileOutputStream fos = new FileOutputStream(“C:/test.txt”);
OutputStreamWriter ow = new OutputStreamWriter(fos, “UTF-8”);
try{
ow.write(“这是要写入的中文”);
}catch(exception e){
//todo
}finally{
ow.close();
}
文件read时解码
FileInputStream fis = new FileInputStream(“C:/test.txt”);
InputStreamReader ir = new InputStreamReader(fis, “UTF-8”);
StringBuffer sb = new StringBuffer();
Char[] buf = new char(64);
Int Count = 0
try{
while( (count = ir.read(buf)) != -1 ){
Sb.append(bug);
}
}finally{
ir.close();
}
字符串编解码
String s = “这是中文测试”;
byte[] b = s.getBytes(“UTF-8”);
String n = new String(b, “UTF-8”);
Charset cs = Charset.forName(“UTF-8”);
ByteBuffer b = cs.encode(string);
CharBuffer cb = cs.decode(b);
URL中的编解码
tomcat的server.xml中配置解析URI的字符串编码,不设置默认用ISO-8859-1
时用head的ContentType定义的charset,否则用ISO-8859-1
Http Header的编解码
一般不要包含非ASCII字符. 如果有非ASCII字符,需要先应用URLEncoder编码,再写入header;到服务器端再对它进行按照设置的编码来解码
POST表单的编解码
按照head的ContentType定义的charset来编解码,在服务器端,可以在第一次getParameter之前要设置request.setCharacterEncoding(charset)
属性enctype=multipart/form-data,即上传文件的编码,也是用ContentType定义的charset
HTTP Body的编解码
response返回给客户端是通过response.setCharacterEncoding(charset)来设置,它将会覆盖request.getCharacterEncoding的值,并通过Header的ContentType返回给客户端
如果返回的Header没有设置ContentType,那页面只能通过HTML的head中的charset来解码,如果这个也没有,则通过默认的编码来解码
JDBC访问数据库的编解码
通过JDBC的URL来设定编码,例如MYSQL: url=”jdbc:mysql://localhost:3306/DB?useUnicode=true&characterEncoding=GBK”
JS文件的编码
需要在属性设置charset=”UTF-8”来编码
encodeURI()将整个URL的字符(ASCII除外)进行UTF-8编码,并在每个码值之前加%
decodeURI()是和encodeURI对应的UTF-8解码
当URL作为参数时,需要对大部分字符编码,encodeURI()不合适,所以要用增强版encodeURIComponect()来编码,对应的用decodeURIComponect()来解码
JAVA处理URL编解码
URLEncoder&URLDecoder将所有加%的UTF-8码值用UTF-8解码,得到原始字符