/**
* 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相关教程见以下内容:
RedHat Linux 5.5安装JDK+Tomcat并部署Java项目
Linux下使用Xshell查看Tomcat实时日志中文乱码解决方案
CentOS 64-bit下安装JDK和Tomcat并设置Tomcat开机启动操作步骤
Ubuntu 16.04下安装Tomcat 8.5.9