Tomcat部署在CentOS 6.8上乱码问题解决(2)

/**
    * Encodes this {@code String} into a sequence of bytes using the
    * platform's default charset, storing the result into a new byte array.
    *
    * <p> The behavior of this method when this string cannot be encoded in
    * the default charset is unspecified.  The {@link
    * java.nio.charset.CharsetEncoder} class should be used when more control
    * over the encoding process is required.
    *
    * @return  The resultant byte array
    *
    * @since      JDK1.1
    */
    public byte[] getBytes() {
        return StringCoding.encode(value, 0, value.length);
    }

如果不指定String.getBytes()里面的参数,它会调用系统默认的参数,也就是java虚拟机的默认参数,查看这个参数的方法如下所示

System.out.println("Default Charset=" + java.nio.charset.Charset.defaultCharset()); 
  System.out.println("file.encoding=" + System.getProperty("file.encoding")); 
  System.out.println("Default Charset=" + java.nio.charset.Charset.defaultCharset()); 
  System.out.println("Default Charset in Use=" + getDefaultCharSet()); 

值得一提的是,当你使用sftp工具上传文件至服务器时,如果没有指定sftp协议的文件名格式,sftp工具会以你默认系统的编码(大部分windows的编码都是GBK)传送中文文件名给服务器,这时候如果服务器默认的编码方式不是GBK,那么你上传的文件名在服务器端显示都是乱码。

CentOS查看系统的编码方式的命令是  echo $LAN ,也可以输入 locale  命令查看系统的编码。

在tomcat7中,用get方式访问中文名的文件,如uploads/%E6%B5%8B%E8%AF%95.mp3

浏览器本身会借助url.enCode()把中文名,空格等等转化为%E8等等的web地址传输编码格式,然后servlet接收到这个地址后会先url.unCode换成普通的编码,然后再根据request.setContentType="UTF-8"来换成中文名,但是这样子设置tomcat的 URIEncoding="UTF-8" 又是闹得哪样?

更多Tomcat相关教程见以下内容

CentOS 6.6下安装配置Tomcat环境 

RedHat Linux 5.5安装JDK+Tomcat并部署Java项目   

Tomcat权威指南(第二版)(中英高清PDF版+带书签)   

Tomcat 安全配置与性能优化  

Linux下使用Xshell查看Tomcat实时日志中文乱码解决方案  

CentOS 64-bit下安装JDK和Tomcat并设置Tomcat开机启动操作步骤  

Ubuntu 16.04下安装Tomcat 8.5.9 

Tomcat中session的管理机制 

Tomcat 的详细介绍请点这里
Tomcat 的下载地址请点这里

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/30772fa91afc2bcfb1d2e1fe3221797c.html