• Servlet & JSP


    Servlet 中的中文字符

    来自 URL 参数部分的中文字符

    Tomcat 默认接收数据的编码是 ISO-8859-1。所以当请求 URL 的参数部分含有中文字符,需要转换字符的编码。 

    Enumeration<String> paramNames = req.getParameterNames();
    while (paramNames.hasMoreElements()) {
        String paramName = (String) paramNames.nextElement();
        String paramValue = req.getParameter(paramName);
        String paramValueUTF8 = new String(paramValue.getBytes("ISO-8859-1"), "UTF-8");
        System.out.println(paramName + ": " + paramValueUTF8);
    }

    上述的方法的一个不足是:需要对所有的参数部分解码。可以直接在 Tomcat 的 server.xml 中将默认的编码设置为 UTF-8。

    <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />

    来自 POST 表单的中文字符

    当客户端提交的表单内容包含中文字符时,可以在获取表单内容前,调用 request.setCharacterEncoding 方法来设置字符的编码:

    req.setCharacterEncoding("UTF-8");
    Enumeration<String> paramNames = req.getParameterNames();
    while (paramNames.hasMoreElements()) {
        String paramName = (String) paramNames.nextElement();
        System.out.println(paramName + ": " + req.getParameter(paramName));
    }

    响应至客户端的中文字符

    当响应至客户端的内容包含中文字符时,可以在获取输出流之前,调用 response.setContentType 方法来设置响应内容的类型及编码。 

    resp.setContentType("text/plain;charset=utf-8");
    resp.getWriter().println("中文字符");

    HTTP 首部的中文字符

    HTTP 首部只支持 ASCII 编码,可以对首部进行 URL 编码。

    resp.setContentType("text/plain;charset=utf-8");
    String fileName = URLEncoder.encode("中文名称.txt", "UTF-8");
    resp.setHeader("Content-disposition", "attachment;filename=" + fileName);

    JSP 中的中文字符

    JSP 页面内容的中文字符

    当 jsp 页面内容包含中文字符时,可以使用 page 指令来指定字符编码。

    <%@ page language="java" contentType="text/html; UTF-8" pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>中文标题</title>
    </head>
    <body>
    中文内容
    </body>
    </html>

    JSP Java 代码中的中文字符

    JSP 的本质即 Servlet,所以当 JSP 页面中的 Java 代码包含中文字符时,则可以参考 Servlet 中是如何解决中文字符的。

  • 相关阅读:
    关于stm32的iic为什么不稳定的讨论
    Android NDK 开发:CMake 使用
    比特币相关
    下载Wistia视频
    C#反射调用 异常信息:Ambiguous match found.
    c++ __super关键字
    开源:AspNetCore 应用程序热更新升级工具(全网第一份公开的解决方案)
    Laravel 生产环境部署,phphub5应用部署记录
    嵌入式系统中的几种文件系统的比较和优缺点(CRAMFS JFFS2 YAFFS2 Initrd SquashFS EXT4)【转】
    【MAT-MemoryAnalyzer】MemoryAnalyzer打开hprof文件报错An internal error occurred during: "Parsing heap dump from
  • 原文地址:https://www.cnblogs.com/huey/p/5452582.html
Copyright © 2020-2023  润新知