• Web开发遇到中文乱码[实战]


    1、关于编码常识

    (1)UTF-8国际编码,GBK中文编码。GBK包含GB2312,即如果通过GB2312编码后可以通过GBK解码,反之可能不成立

    (2)Tomcat服务器编码,默认是ISO8859-1

    2、排查路径

    (1)Nginx,如果你的项目有经过Nginx代理

     1 upstream you.domainName.com {
     2     server 127.0.0.1:8081;
     3 }
     4 server {
     5   listen      80;
     6   server_name  you.domainName.com;
     7   charset utf-8; 
     8 
     9   location /examples {
    10       return 403;
    11     }
    12 }

    (2)Tomcat

    找到Tomcat的配置文件

    1 <Server port="8005" shutdown="SHUTDOWN">
    2     <!-- 其他配置  -->
    3     <Service name="Catalina">
    4           <Connector port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8" />   
    5           <!-- 其他配置  -->
    6     </Service>
    7 </Server>

    (3)GET

    String productTypeName=request.getParameter("productTypeName");
    byte[] bytes=str.getBytes("ISO-8859-1");
    productTypeName=newString(bytes,"utf-8");

    (4)POST

    request.setCharacterEncoding("utf-8");

    tip:这个是我自己项目遇到的,由于生产是Linux环境,修改了nginx和tomcat,包括post方式都不行,所以怀疑是linux环境下tomcat的问题

    在配置文件/usr/local/tomcat/bin/catalina.sh

    解决办法:修改Tomcat的bin目录下的catalina.sh文件,找到以下代码:

    if [ -z "$LOGGING_MANAGER" ]; then
    JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager "
    else
    JAVA_OPTS="$JAVA_OPTS $LOGGING_MANAGER"

    修改为

    if [ -z "$LOGGING_MANAGER" ]; then
    JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8"
    else
    JAVA_OPTS="$JAVA_OPTS $LOGGING_MANAGER -Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8"

    这应该是linux初始化没有设置到,既然遇到了做下记录,共勉

  • 相关阅读:
    硬盘坏道及后续的拯救工作
    Extension GL_VERSION_1_2 could not be loaded.
    js显示当前的年月日时分秒
    如何删除桌面上的回收站?
    Fedora 15 U盘 安装心得
    庄子·内篇·逍遥游
    Additional Oracle Performance Extensions
    Features Specific to JDBC OCI Driver
    OracleDatabase 配置
    vim字符编码设置
  • 原文地址:https://www.cnblogs.com/zhuziyu/p/9395568.html
Copyright © 2020-2023  润新知