LINUX下tomcat的jvm编码修改

原创 2017年06月30日 15:32:47

申请了一台腾讯云服务器,系统centos7,将jforum论坛移植过去,论坛在阿里云的其他两台服务器运行正常,搬到这台服务器巨出现了各种问题,一一记录一下供以后参考:

jforum用的是freemarker,里面的中文都是读取的配置文件,但是有部分写死的汉字,显示为黑色菱形问号乱码,

先是查看系统语言,locale,

[root@VM_39_230_centos bin]# locale

locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=Zn_CN.UTF-8
LC_CTYPE="Zn_CN.UTF-8"
LC_NUMERIC="Zn_CN.UTF-8"
LC_TIME="Zn_CN.UTF-8"
LC_COLLATE="Zn_CN.UTF-8"
LC_MONETARY="Zn_CN.UTF-8"
LC_MESSAGES="Zn_CN.UTF-8"
LC_PAPER="Zn_CN.UTF-8"
LC_NAME="Zn_CN.UTF-8"
LC_ADDRESS="Zn_CN.UTF-8"
LC_TELEPHONE="Zn_CN.UTF-8"
LC_MEASUREMENT="Zn_CN.UTF-8"
LC_IDENTIFICATION="Zn_CN.UTF-8"
LC_ALL=
LANG="zh_CN.UTF-8"
[root@VM_39_230_centos bin]# 

之前系统语言不是zh_CN.UTF-8,导致vi或者cat带汉字的文件是汉字显示乱码,改为zh_CN.UTF-8解决此问题

具体方法在

/etc/sysconfig/i18n
中加入
[root@VM_39_230_centos bin]# cat /etc/sysconfig/i18n
LANG="zh_CN.UTF-8"

之前都不是Zn_CN.UTF-8,导致vi文件时汉字乱码,文件编码为utf-8,但页面乱码应该不是这个问题导致,这个修复了vi或者cat文件时汉字显示乱码

[root@VM_39_230_centos bin]# cat /etc/sysconfig/i18n

在/etc/sysconfig/i18n加入以上解决

尝试设置

为了使Tomcat支持中文文件名并且让Tomcat能够自己处理Get方式传递过来的参数,那么我们已经在Tomcat安装目录下的conf/server.xml里头修改如下:

    <Connectorport="8080" protocol="HTTP/1.1"

              connectionTimeout="20000"

              redirectPort="8443" URIEncoding="UTF-8"/>

并无卵用,

之后对三个服务器执行以下代码

        System.getProperty("file.encoding")



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

测试后发现两个服务器都是utf-8,腾讯的是其他,导致htm模板里面写死的中文乱码,
可以通过代码确认当前jvm运行的编码


eclipse中Tomcat启动信息中有
六月 30, 2017 1:50:17 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Dfile.encoding=UTF-8;

此参数是在jvm启动的时候就已经设置完成。如果没有手动设置file.encoding,会根据当前系统的编码指定。 
如果在Windows下,file.encoding=”GBK”, 
如果在Linux下,file.encoding=”UTF-8”。 
注意:在Tomcat启动完成后,在程序中通过设置system property的方式是没有效果的,原因是jvm启动时读取file.encoding并cache,后续只使用启动时读取的编码。
修改jvm编码
Linux环境
在catalina.sh配置
加一行
 JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=utf-8"


JVM的缺省编码方式由系统的“本地语言环境Locale”设置确定。JVM的file.encoding属性,这个属性确定了JVM的缺省的编码/解码方式:从而影响应用中所有字节流==>字符流的解码方式 ,字符流==>字节流的编码方式。JVM会根据操作系统的Locale设置自动调整语言环境。基本不用设置。

用eclipse启动会看到

信息: Command line argument: -Dcatalina.base=E:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0

-Dfile.encoding=UTF-8

这一行,是jvm的默认编码,在项目中指定编码应该也可以解决该问题

例如:

BufferedReader in =newBufferedReader((newInputStreamReader(newFileInputStream(path.toString()),"utf-8")));

这里我修改了tomcat中jvm启动默认编码

查看jvm编码

可以通过代码确认当前jvm运行的编码

System.getProperty("file.encoding")
1
1
此参数是在jvm启动的时候就已经设置完成。如果没有手动设置file.encoding,会根据当前系统的编码指定。
如果在Windows下,file.encoding=”GBK”,
如果在Linux下,file.encoding=”UTF-8”。
注意:在Tomcat启动完成后,在程序中通过设置system property的方式是没有效果的,原因是jvm启动时读取file.encoding并cache,后续只使用启动时读取的编码。

修改jvm编码

Linux环境

在catalina.sh配置

JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=utf-8"

然后运行测试代码

结果网站出现Default Charset=UTF-8 file.encoding=utf-8 Default Charset=UTF-8

jvm编码已经改过来,看网站乱码汉字也已经正常显示.

这编辑器真是难用啊,第一次用!

版权声明:本文为博主原创文章,未经博主允许不得转载。

Tomcat设定运行jvm的编码

查看jvm编码可以通过代码确认当前jvm运行的编码System.getProperty("file.encoding")此参数是在jvm启动的时候就已经设置完成。如果没有手动设置file.encodi...
  • xinluke
  • xinluke
  • 2016年05月24日 14:35
  • 5795

tomcat部署之字符编码问题

上次由于把公司V7旅游平台迁移过去之后员工告诉我搜不到旅游团号,员工发送的是get请求中文编码由于跟我tomcat7.0的默认编码冲突UTF-8导致了中文乱码最终在这里总结一下 1.首先我们...

Linux平台Java环境中文编码研究

09年在原来公司做的一篇文章,现在共享出来。 此次研究主要针对Linux操作系统中Java环境下可能产生的中文乱码问题展开一些试验,目的在于寻求一套无乱码的解决方案。 此文档目的在于详细介...

Linux下,Tomcat8修改jvm内存配置

Tomcat并不建议直接在catalina.sh里配置变量,而是写在与catalina同级目录(bin目录)下的setenv.sh里。所以如果我们想要修改jvm的内存配置,那么我们就需要修改seten...
  • acwa123
  • acwa123
  • 2017年05月22日 15:37
  • 4107

JVM默认编码

1、通过System.out.println(System.getProperty("file.encoding"));可查看JVM运行时所使用的编码 2、默认情况: 1)Windows下,fil...

简述 URL 并分别说明各部分的含义

转自:http://blog.csdn.net/dzhj11/article/details/9194999 统一资源定位符(URL)是用于完整地描述Internet上网页和其他资源的地址的一种标识方...

前端-ajax请求常见问题

1、ajax执行先后顺序 解决方法1: http://www.cnblogs.com/cdf-opensource-007/p/6371237.html 解决方法2: [javascript]...

Linux下Tomcat占用JVM内存数修改及监控

在Tomcat设计之初,因为考虑到客户的服务器性能不同,防止虚拟内存不足,所以Tomcat默认设置JVM允许使用内存数为最小64M,最大128M,但是在一些项目占用资源比较庞大,或者高并发量的项目中,...

Tomcat 修改Linux下tomcat的JVM内存大小

在开发过程中,我们会经常遇到java.lang.OutOfMemoryError: PermGen space或者java.lang.OutOfMemoryError: Java heap space...

Linux下jvm、tomcat、mysql、log4j优化配置笔记

           云主机配置大致为:centeos6(32位),4核心cpu,4G内存,5M独享带宽。         一、jvm内存优化方案。            要优化...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LINUX下tomcat的jvm编码修改
举报原因:
原因补充:

(最多只允许输入30个字)