zoukankan      html  css  js  c++  java
  • 编码 web

    在JSP页面获取表单的值时会出现乱码,有两种解决方法:

    1.在调用getParameter之前通过request.setCharacterEncoding设置字符编码

    2.调用new String(str.getBytes("iso8859-1"), "UTF-8");编码后解码

    0.字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。
    码指的是二进制 编码方法,或称码制 
     数字系统的主要功能是处理信息,将信息表示成电路能够识别,便于运算存储的形式。
    解码:字符集<---字符编码----字符<--------字节<-------位
     
    字符集是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,
    常见字符集名称:ASCII字符集、GB2312字符集、Unicode字符集、BIG5字符集、 GB 18030字符集等。
    计算机要准确的处理各种字符集文字,需要进行字符编码,以便计算机能够识别和存储各种文字。 
    最早的编码是iso8859-1,和ascii编码相似。但为了方便表示各种各样的语言,逐渐出现了很多标准编码,重要的有如下几个。

    规律:

    utf-8编码可以用gbk和iso8859-1解码后编回去

    gbk编码后只能用iso8859-1解码后编回去

    1.首先确定工程以及其中文件的编码:
     
    工程编码:
     
    在MyEclipse的属性里,有几个地方可以改编码设置:
     
    更改工作空间编码:window-->preference-->general-->worspace
     
    更改特定类型文件编码:window-->preference-->general-->content type
     
    MyEclipse-->window-->perferences--->myeclipse--->Files and Editor -->JSP--->Encoding
     
     
    2.设定jsp页面的编码
     
    <%@page pageEncoding="gb2312" contentType="text/html; charset=utf-8"%>
     
    contentType的charset是指服务器发送给客户端时的内容编码
    pageEncoding是jsp文件本身的编码
     
     
    JSP要经过两次的“编码”,第一阶段会用pageEncoding,第二阶段会用utf-8至utf-8,第三阶段就是由Tomcat出来的网页, 用的是contentType。
     
    第一阶段是jsp编译成.java,它会根据pageEncoding的设定读取jsp,结果是由指定的编码方案翻译成统一的UTF-8 JAVA源码(即.java),如果pageEncoding设定错了,或没有设
     
    定,出来的就是中文乱码。
     
    第二阶段是由JAVAC的JAVA源码至java byteCode的编译,不论JSP编写时候用的是什么编码方案,经过这个阶段的结果全部是UTF-8的encoding的java源码。
     
    JAVAC用UTF-8的encoding读取java源码,编译成UTF-8 encoding的二进制码(即.class),这是JVM对常数字串在二进制码(java encoding)内表达的规范。
     
    第三阶段是Tomcat(或其的application container)载入和执行阶段二的来的JAVA二进制码,输出的结果,也就是在客户端见到的,这时隐藏在阶段一和阶段二的参数
     
    contentType就发挥了功效
     
    Tomcat默认使用ISO-8859-1方式去读取
     
    --------------------------------------------------------------------------------
    3.servlet中设置输出页面的编码格式:
     
    response.setContentType("text/xml");
    response.setCharacterEncoding("gb2312");
     
    4.数据库的编码
     
    (1) 数据库使用UTF-16
    如果String中是UNICODE字符,写入读出时不需要转码
    (2) 数据库使用ISO8859_1
    如果String中是UNICODE字符,写入读出时需要转码
    写入:String newStr = new String(oldStr.getByte(“GB2312”), “ISO8859_1”);
     
    5.资源文件的编码方式和编辑平台相关。
     
    WINDOWS平台下编写的资源文件,以GB2312方式编码。在编译时需要转码,以确保在各个平台上的正确性;
    public String Asc2CNStringLang(String s)
    {
    char[] src = s.toCharArray();
    byte[] tar = new byte[src.length];
     
    for (int i=0;i<src.length;i++)< span="">
    tar[i] = (byte)(src[i]&0xFF);
     
    ByteToCharConverter toChar = ByteToCharConverter.getConverter("gb2312");
    return new String(toChar.convertAll(tar));
    }
  • 相关阅读:
    【设计模式
    【设计模式
    【设计模式
    【设计模式
    【设计模式
    【设计模式
    实干猪
    Mysql 千万级快速查询|分页方案
    如何成为一名优秀的CTO(首席技术官)
    成为优秀程序员的10个有效方法
  • 原文地址:https://www.cnblogs.com/xiaodoujiaohome/p/4938886.html
Copyright © 2011-2022 走看看