美文网首页
JavaWeb 中的编码问题

JavaWeb 中的编码问题

作者: sunboximeng | 来源:发表于2018-07-12 23:50 被阅读10次

数据在传输或是存储过程中,都是以字节的方式在运行,所以就有了编码问题。
用户想服务器发送一个HTTP请求,需要编码的地方有url、cookie、parameter,经过编码后服务器接受HTTP请求,解析HTTP请求,然后对url、cookie、parameter进行解码。在服务器进行业务逻辑处理过程中可能需要读取数据库、本地文件或者网络中的其他文件等等,这些过程都需要进行编码解码。

常见编码方式:

  • ISO-8859-1,拉丁编码,没有中文编码,所以一定会乱码。
  • GBK,GB2312,中国的国标码,目前中国境内的浏览器的默认编码就是GBK。
  • UTF-8,支持全世界各个国家的编码,一般就用它。

与编码有关的字符串方法:

  • getBytes(String charset)
  • new String(byte[] bytes,String charset)
  1. html
    本身含有编码格式,所以无须担心浏览器解析html页面。

  2. request
    html页面的编码方式一般情况下已经被设置成了UTF-8,所以我们只需要设置服务器端的解码方式也为UTF-8即可。
    request.setCharacterEncoding(charset);
    必须写在第一次使用request.getParameter()之前,这样才能保证参数是按照已经设置的字符编码来获取。
    只对消息体中的数据起作用,能解决表单方法为POST的中文乱码情况。而方法为GET的依然为乱码,对于URL中的参数不起作用。

  3. get请求参数
    对于get请求方式,理论上,我们也只需要告诉服务器以UTF-8的方式解码即可,但不幸的是,它不允许我们以编写代码的方式来更改服务器的解码方式,只能通过修改服务器的配置文件。
    既然不能通过编写代码的方式来更改解码方式,那怎么解决这个问题呢?其解决办法就是反编码:
    String str=new String(request.getParameter("变量名").getBytes("ISO-8859-1"),"UTF-8");

  4. response
    默认编码方式是ISO-8859-1。
    response.setContentType("text/html;charset=UTF-8");
    这句代码也是在设置了浏览器的解码方式的同时也设置了服务器段的编码方式。
    必须写在PrintWriter out =request.getWriter()之前,这样才能保证out按照已经设置的字符编码来进行字符输出。

  5. cookie
    cookie的键值中包含了逗号、分号、空格就会导致客户端的响应码是500,并且也不提示具体原因。查看请求响应消息就会发现cookie设置失败,没有代码中设置的的字段。
    不知道为什么response对象设置不了它的编码,必须要单独设置!
    URLEncoder.encode(String s, "utf-8");
    解码同理。

相关文章

  • JavaWeb 中的编码问题

    数据在传输或是存储过程中,都是以字节的方式在运行,所以就有了编码问题。用户想服务器发送一个HTTP请求,需要编码的...

  • javaweb编码问题

    在介绍编码问题前,先介绍一下java平台(JVM)上的编码转化情况。首先要说明的一点,在JVM中,即java平台上...

  • JavaWeb——中文编码问题

    一、常见的编码方式 (1)ASCII码这是最简单的一种编码方式。这种编码方式总共可以表示128个字符,其中包括控制...

  • IntelliJ IDEA 报错:Error:java: 未结束

    构建javaweb项目时,控制台报错: 这个问题是由于编码冲突导致的,在设置中找到File Encodings可以...

  • JavaWeb中文编码问题全面解析

    需要编码的原因 计算机中存储的最小单元是一个字节,即8bit,所以能表示的字符范围是0~255个。 人类要表示的符...

  • 编码

    参考:字符编码常识及问题解析深入分析 Java 中的中文编码问题 关于字符编码,你所需要知道的 编码是什么? 编码...

  • Ruby 中的编码问题

    近日使用ruby获取设备的短信,由于获取到的字符有乱码导致对字符串的处理程序报错 其他操作也一样报错可以使用如下程...

  • python中的编码问题

    个人速记 1. python3 和python2 的区别 python3 中有两种表示字符序列的类型:bytes ...

  • python中的编码问题

    decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示...

  • Python中的编码问题

    python文件的编码 v2.7 首先,encode('codec') => 把unicode转化成其他codec...

网友评论

      本文标题:JavaWeb 中的编码问题

      本文链接:https://www.haomeiwen.com/subject/dlydpftx.html