解决java在idea运行正常,但是打成jar包后中文乱码问题

目录

比如: 打包命令使用utf-8编码:


1.当在idea中编写的程序,运行一切正常.但是当被打成jar包时,执行的程序会中文乱码.产生问题的原因和解决方案是什么呢?

一.问题分析
分别使用idea和jar包形式打印出System中所有的jvm参数---代码如下:

public static void main(String[] args) {printEnv();//读取excelExcelUtil.simpleRead(Constant.EXCEL_PATH, AddedTax.class, 0, new AddedTaxListenner());}private static void printEnv(){//获取环境变量Map<String, String> envs = System.getenv();envs.forEach( (key,value) ->{//System.out.println("env---key是: "+key +" ; "+"env---value是: "+ value);});//获取jvm属性Properties properties = System.getProperties();properties.forEach((key, value) -> {System.out.println("jvm---key是: "+key +" ; "+"jvm---value是: "+ value);});}


 
 

idea的打印结果:

jvm---key是: user.name ; jvm---value是: ZHULIBIN10
jvm---key是: file.encoding ; jvm---value是: UTF-8
jvm---key是: java.specification.version ; jvm---value是: 1.8
jvm---key是: java.awt.printerjob ; jvm---value是: sun.awt.windows.WPrinterJob
jvm---key是: user.timezone ; jvm---value是: Asia/Shanghai
jvm---key是: user.home ; jvm---value是: C:\Users\zhulibin10
jvm---key是: os.version ; jvm---value是: 10.0
jvm---key是: sun.management.compiler ; jvm---value是: HotSpot 64-Bit Tiered Compilers
jvm---key是: java.specification.name ; jvm---value是: Java Platform API Specification
jvm---key是: java.class.version ; jvm---value是: 52.0

jar包的打印结果:

 如上图所示:

 问题就在这里,当使用idea时候,file.encoding的值是UTF-8; 使用jar包运行则file.encoding的值是GBK,这是导致乱码的直接原因.

java 乱码问题解决: -Dfile.encoding=UTF-8
 

-Dfile.encoding 解释:
在命令行中输入 java,在给出的提示中会出现 -D 的说明:
-D<name>=<value> # set a system property
-D 后面需要跟一个键值对,作用是设置一项系统属性
对 -Dfile.encoding=UTF-8 来说就是设置系统属性 file.encoding 为 UTF-8
那么 file.encoding 什么意思?字面意思为文件编码。
搜索 java 源码,只能找到 4 个文件中包含 file.encoding 的文件,
也就是说,只有四个文件调用了 file.encoding 这个属性。
在 java.nio.charset 包中的 Charset.java 中,这段话的意思说的很明确了。
简单说就是默认字符集是在 java 虚拟机启动时决定的,
依赖于 java 虚拟机所在的操作系统的区域以及字符集。
代码中可以看到,默认字符集就是从 file.encoding 这个属性中获取的。

二.问题解决总结:

 不管在任何平台,启动jar包的方式: java -jar  -Dfile.encoding=utf-8 YourName.jar

比如: 打包命令使用utf-8编码:

java -jar  -Dfile.encoding=utf-8 项目包名字.jar


三.解决cmd格式下输出乱码:
可写一个启动bat,将start.bat改为java -jar  -Dfile.encoding=utf-8 YourName.jar,问题就可以轻松解决。

如果还未解决,请修改cmd程序的编码注册表信息:

对于编译出的程序,在 cmd 和 power shell 运行时都不能正确显示汉字。 
网上查,可以再命令窗口修改: 
1、打开CMD.exe命令行窗口 
2、通过 chcp命令改变代码页,UTF-8的代码页为65001 
chcp 65001 
执行该操作后,代码页就被变成UTF-8了。
在当前窗口的确可以解决问题,但是重新打开的cmd窗口或者power shell 窗口仍然不能正确显示汉字。

————————————————
版权声明:本文为CSDN博主「魔都Thomas」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42058242/article/details/114933003 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/155232.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【设计模式】行为型设计模式

行为型设计模式 文章目录 行为型设计模式一、概述二、责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;三、命令模式&#xff08;Command Pattern&#xff09;四、解释器模式&#xff08;Interpreter Pattern&#xff09;五、迭代器模式&#xff08;Iterato…

Stable Diffusion专场公开课

从SD原理、本地部署到其二次开发 分享时间&#xff1a;11月25日14&#xff1a;00-17&#xff1a;00 分享大纲 从扩散模型DDPM起步理解SD背后原理 SD的本地部署:在自己电脑上快速搭建、快速出图如何基于SD快速做二次开发(以七月的AIGC模特生成系统为例) 分享人简介 July&#…

HelpLook VS Zendesk:哪种知识库软件更适合您的业务

为任何组织创造一个开放且协作的环境至关重要。然而&#xff0c;高水平的员工每周可能会花费多达30个小时处理电子邮件和协作&#xff0c;对他们的工作效率产生了重大影响。 为了解决这个挑战&#xff0c;建立一种高效的信息共享方法至关重要&#xff0c;不会妨碍团队的生产力…

福州大学《嵌入式系统综合设计》实验三:多媒体开发基础编程

一、实验目的 本实验基于搭建好的开发环境和硬件环境&#xff0c;通过编写简单的通信实验&#xff0c;验证开发环境&#xff0c;掌握多媒体开发编程基础&#xff0c;包括SOCKET编程、多线程编程和线程同步知识。 二、实验内容 基于套接字、多线程、同步锁机制实现多媒体文件…

循环链表3

插入函数——插入数据&#xff0c;在链表plsit的pos位置插入val数据元素 位置pos&#xff08;在无特别说明的情况下&#xff09;是从0开始计数的 要改变链表结构&#xff0c;就要依赖前驱&#xff0c;每个前驱的next存储着下一个数据结点的地址&#xff0c;也就是依靠前驱的ne…

netty整合websocket(完美教程)

websocket的介绍&#xff1a; WebSocket是一种在网络通信中的协议&#xff0c;它是独立于HTTP协议的。该协议基于TCP/IP协议&#xff0c;可以提供双向通讯并保有状态。这意味着客户端和服务器可以进行实时响应&#xff0c;并且这种响应是双向的。WebSocket协议端口通常是80&am…

敏捷需求管理

敏捷需求管理是一种以敏捷方式进行需求收集、分析和确认的方法。它强调持续不断的需求迭代和交付&#xff0c;以适应快速变化的市场和业务需求。 敏捷需求管理的主要特点包括&#xff1a; 以用户故事为核心&#xff1a;敏捷需求管理以用户故事为核心&#xff0c;将用户需求作…

FPGA——IP核 基础操作

FPGA——IP核 基础操作 IP核例化模块时钟IP核RAM IP核 IP核例化模块 找到模版 加入代码中 时钟IP核 配置模式功能 配置输入时钟 输出配置 RAM IP核

JavaScript 常用符号

JavaScript是一门基础性的编程语言&#xff0c;常用于web开发中。JS中有许多特殊的符号&#xff0c;这些符号的用法十分重要&#xff0c;直接影响代码的正确性和可读性。在日常编写中&#xff0c;我们会频繁使用以下几个符号。 一、等于号&#xff08;&#xff09; 等于号在JS…

QT之QProcess

类描述信息 QProcess允许您将进程视为顺序I/O设备。您可以写入和读取进程&#xff0c;就像使用QTcpSocket访问网络连接一样。然后&#xff0c;您可以通过调用write()写入进程的标准输入&#xff0c;并通过调用read()、readLine()和getChar()读取标准输出。由于QProcess继承了QI…

python 将str转换成list

import ast str [a,b,c] list ast.literal_eval(str) print(type(list))

Pytorch 网络冻结的三种方法区别:detach、requires_grad、with_no_grad

1、requires_grad requires_gradTrue # 要求计算梯度&#xff1b; requires_gradFalse # 不要求计算梯度&#xff1b;在pytorch中&#xff0c;tensor有一个 requires_grad参数&#xff0c;如果设置为True&#xff0c;那么它会追踪对于该张量的所有操作。在完成计算时可以通过调…

阿里云服务器公网带宽升级的三种方法

阿里云服务器公网带宽不够用有哪些解决方法&#xff1f;可以更改带宽或带宽临时升级&#xff0c;更改带宽是永久公网带宽&#xff0c;带宽临时升级可以选择升级时间段&#xff0c;也可以绑定弹性公网EIP来修改公网带宽&#xff0c;阿里云服务器网aliyunfuwuqi.com分享阿里云服务…

海外IP代理科普——API代理是什么?怎么用?

随着互联网的不断发展&#xff0c;越来越多的企业开始使用API&#xff08;应用程序接口&#xff09;来实现数据的共享和交流。而在API使用中&#xff0c;海外代理IP也逐渐普及。那么&#xff0c;什么是API代理IP呢&#xff1f;它有什么作用&#xff1f;API接口有何用处&#xf…

从0开始学习JavaScript--JavaScript 函数

JavaScript中的函数是编写可维护、模块化代码的关键。本文将深入研究JavaScript函数的各个方面&#xff0c;包括基本语法、函数作用域、闭包、高阶函数、箭头函数等&#xff0c;并通过丰富的示例代码来帮助读者更好地理解和应用这些概念。 函数的基本语法 函数是一段可被重复…

git merge指定的文件

如果你只想在合并时包含特定类型的文件&#xff08;例如&#xff0c;只合并.java文件&#xff09;&#xff0c;可以使用git checkout命令和git merge命令的组合来实现。以下是一个可能的步骤&#xff1a; 确保在目标分支上&#xff1a; 在执行合并之前&#xff0c;请确保你已经…

openGauss学习笔记-129 openGauss 数据库管理-参数设置-查看参数值

文章目录 openGauss学习笔记-129 openGauss 数据库管理-参数设置-查看参数值129.1 操作步骤129.2 示例 openGauss学习笔记-129 openGauss 数据库管理-参数设置-查看参数值 openGauss安装后&#xff0c;有一套默认的运行参数&#xff0c;为了使openGauss与业务的配合度更高&…

nvim 配置教程

1. 主角&#xff1a; NeoVim sudo apt install -y ninja-build gettext cmake unzip curl sudo apt install -y universal-ctags cscope #函数跳转用到的依赖 git clone https://github.com/neovim/neovim.git --depth1 cd neovim make CMAKE_BUILD_TYPERelWithDebInfo sudo…

C#学习相关系列之Linq用法---where和select用法(二)

一、select用法 Linq中的select可以便捷使我们的对List中的每一项进行操作&#xff0c;生成新的列表。 var ttlist.select(p>p10); //select括号内为List中的每一项&#xff0c;p10即为对每一项的操作&#xff0c;即对每项都加10生成新的List 用法实例&#xff1a; 1、la…

C++ 20类型转换指南:使用场景与最佳实践

C 20类型转换指南&#xff1a;使用场景与最佳实践 类型转换 (Casts) C 提供了五种特定的类型转换&#xff1a;const_cast<>()、static_cast<>()、reinterpret_cast<>()、dynamic_cast<>() 和 C20 引入的 std::bit_cast<>()。 请注意&#xff…