windows/tomcat 修改java虚拟机JVM以utf-8字符集加载class文件的两种方式
1.情景展示
做了这么长时间的java开发,但是,你知道JVM是以怎样的编码加载、解析class文件的吗?
我们知道,通常情况下,我们会将java文件的字符集修改成utf-8,这样,理所当然地就认为:JVM在加载class的时候,自然是按照utf-8进行解析的。
事实并非如此:JVM加载class文件默认采用的字符集,是由操作系统来决定的。
换句话说,JVM会根据操作系统的字符集来解析你的class文件,而不是智能的去判断你的class文件的字符集而进行解析。
这样,肯定有问题。
2.原因分析
以win7/win10中文操作系统为例,我们借助开发工具以utf-8将java文件编译成class文件,而解析的时候却以GBK的编码加载到JVM中,不出问题才怪!
但是,问题恰恰就出现在了这里,一直都是以utf-8进行编译,以gbk进行解析,中文也没有出现乱码问题,至于为什么,我没有想通。
今天的重点不在这里,重点是,我们怎么让JVM以utf-8的格式解析class文件?
3.解决方案
方案一:设置环境变量
快捷键:win+r--》输入sysdm.cpl-->回车--》高级--》环境变量--》系统变量--》新建

变量名设置为:JAVA_TOOL_OPTIONS
变量值设置为: -Dfile.encoding=UTF-8
确定即可。
方案二:修改tomcat
路径:{TOMCAT_HOME}/bin/catalina.bat
打开该文件,在有对JAVA_OPS设置的地方,添加代码

:设置JVM以utf-8格式解析class文件
set "JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding=UTF-8"
重新启动tomcat即可。
注意:如果你像上面那样修改成utf-8后,重启后的tomcat,日志肯定乱码。

因为Tomact日志字符集采用的是gbk,java强制将gbk转换成utf-8后,造成乱码是自然的事情了。
位置:{TOMCAT_HOME}/conf/logging.properties文件

#指定tomcat日志字符集
java.util.logging.ConsoleHandler.encoding = GBK
修改成功后,日志便不再乱码。

提醒:在Windows下,在黑窗口使用命令对java文件进行编译且没有指定字符集的前提下,编译时默认采用的也是gbk的编码,与java文件本身的字符集无关。
windows/tomcat 修改java虚拟机JVM以utf-8字符集加载class文件的两种方式的更多相关文章
- Java虚拟机JVM学习02 类的加载概述
Java虚拟机JVM学习02 类的加载概述 类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对 ...
- Java加载资源文件的两种方法
处理配置文件对于Java程序员来说再常见不过了,不管是Servlet,Spring,抑或是Structs,都需要与配置文件打交道.Java将配置文件当作一种资源(resource)来处理,并且提供了两 ...
- Java的IO操作中有面向字节(Byte)和面向字符(Character)两种方式
解析:Java的IO操作中有面向字节(Byte)和面向字符(Character)两种方式.面向字节的操作为以8位为单位对二进制的数据进行操作,对数据不进行转换,这些类都是InputStream和Out ...
- Java 爬虫遇上数据异步加载,试试这两种办法!
这是 Java 爬虫系列博文的第三篇,在上一篇 Java 爬虫遇到需要登录的网站,该怎么办? 中,我们简单的讲解了爬虫时遇到登录问题的解决办法,在这篇文章中我们一起来聊一聊爬虫时遇到数据异步加载的问题 ...
- [二]Java虚拟机 jvm内存结构 运行时数据内存 class文件与jvm内存结构的映射 jvm数据类型 虚拟机栈 方法区 堆 含义
前言简介 class文件是源代码经过编译后的一种平台中立的格式 里面包含了虚拟机运行所需要的所有信息,相当于 JVM的机器语言 JVM全称是Java Virtual Machine ,既然是虚拟机, ...
- Java多线程系列--“基础篇”02之 常用的实现多线程的两种方式
概要 本章,我们学习“常用的实现多线程的2种方式”:Thread 和 Runnable.之所以说是常用的,是因为通过还可以通过java.util.concurrent包中的线程池来实现多线程.关于线程 ...
- JAVA 中加载属性文件的4种方法
小总结 : 这个集合属性可以反序列化, 把持久化数据读出来, 输入流中放入要操作的文件! p.load加载这个输入流! p.getProperty( key) 根据这个键获得值! 补充 : web工程 ...
- java客户端验证https连接(忽略证书验证和证书验证两种方式)
首先根据如下操作生成证书,配置springboot https,生成一个简单的https web服务 https://www.cnblogs.com/qq931399960/p/11889349.ht ...
- Java 打开文件的两种方式
import java.awt.Desktop; import java.io.File; import java.io.IOException; public class LnkDemo { pub ...
随机推荐
- Codeforces Round #594 (Div. 2) A. Integer Points 水题
A. Integer Points DLS and JLS are bored with a Math lesson. In order to entertain themselves, DLS to ...
- python zip压缩文件并设置密码
zip -P "123" -r app.zip app压缩文件 密码 压缩后名称 压缩对象名称 def zipDir(dirpath, outFullNa ...
- 一份完整的PyCharm图解教程
PyCharm 是一种 Python IDE,可以帮助程序员节约时间,提高生产效率.那么具体如何使用呢?本文从 PyCharm 安装到插件.外部工具.专业版功能等进行了一一介绍,希望能够帮助到大家. ...
- 初学者用js做的计算题
1.苹果3元一个,鸭梨2元一个,桃子1元一个.现在想用200元买100个水果,在控制台中打印出来. var apple = 0; //苹果 var pear = 0; //梨 var peach = ...
- CPU参数指标说明
%user %user表示CPU一共花了多少比例的时间运行在用户态空间或者说是用户进程(running user space processes) 典型的用户态空间程序有:Shells.数据库.web ...
- NRF51822/NRF51802/NRF52832/NRF52810/NRF52811/NRF52840内核对比
NRF51822的内核为M0,FLASH是256K,RAM是16K,蓝牙BLE4.0/4.2(SDK新版本支持4.2)NRF51802的内核为M0,FLASH是256K,RAM是16K,蓝牙BLE4. ...
- Unity BehaviorDesigner行为树基础总结
BehaviorDesigner——行为树,用于控制和实现AI逻辑,类似于这样: 上面这个行为树实现了这样的逻辑: 当Player有Input时按照Input值来移动,无Input时查找最近的可攻击目 ...
- 洛谷 P1351 (枚举)
### 洛谷P1351 题目链接 ### 题目大意: 给你 n 个节点, n-1 条边的无向联通图.若定义(u,v)表示 u 与 v 点的最短距离,如果 (u,v)值为 2 ,则这两个点的点权之积(即 ...
- 全网趣味网站分享:今日热榜/Pixiv高级搜索/win10激活工具/songtaste复活/sharesome汤不热替代者
1.回形针手册 由科普类视频节目“回形针PaperClip”近期提出的一个实用百科工具计划,计划名称是回形针手册. 包含了当下科技,农业等等各行各业的各种相关信息,计划刚刚开始! 关于回形针手册的详细 ...
- elementui中的el-table中拼接两个列表字段
我们知道,在ElementUI中我们是使用下面的语法来展示列表字段的: <el-table :data="yanggbs" stripe style="width: ...