分享

idea maven 乱码 控制台

 一本正经地胡闹 2019-12-09
------------------------
根本解决方法:
Setting->maven->runner  VMoptions:-Dfile.encoding=GB2312
或者 -Dfile.encoding=GBK
------------------------
其他方法:
1. jdbc:mysql://localhost:3306/sheep?characterEncoding=utf-8 连接数据库取数据层面
2. idea64.exe.vmoptions(32位的是idea.exe.vmoptions)添加-Dfile.encoding=UTF-8
3. Setting->Editor->File Encodings 设置UTF-8
4.  设置windows环境变量 变量名: JAVA_TOOL_OPTIONS, 变量值:-Dfile.encoding=UTF-8
5.  run-->edit configurations  VM options一栏:-Dfile.encoding=UTF-8
问题:

windows下,idea里,setting-->file encoding改成utf-8后,maven工程System.out.println()控制台出现中文乱码。但java工程不是乱码。

解决方法:

将jvm默认编码设置为UTF-8

方法一:run-->edit configurations,在需要的类上,VM options里添加


方法二:创建系统环境变量(一劳永逸):

变量名: JAVA_TOOL_OPTIONS, 变量值:-Dfile.encoding=UTF-8

转自 https://www.cnblogs.com/LinKinSJ/p/9096921.html

原因分析:

命令行导致乱码

JAVA_TOOL_OPTIONS用于解决的经典问题是使用命令行导致中文乱码,通过设置环境变量JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF-8"一般可以解决。(https://blog.csdn.net/ly199108171231/article/details/85253946

maven工程恰恰是用命令行启动。分析:应该是命令行没有输入相关参数,导致了输出乱码。

java工程和maven工程里的-Dfile.encoding=UTF-8

以下是java工程执行时的命令行,红色行-Dfile.encoding=UTF-8后面跟着jdk里的包

E:\java\tts9-v2-win-x64\tts9\jdk1\bin\java.exe
        +
        +
        +
        E:\java\tts9-v2-win-x64\tts9\jdk1\jre\lib\deploy.jarE:\java\tts9-v2-win-x64\tts9\jdk1\jre\lib\ext\access-bridge-jarE:\java\tts9-v2-win-x64\tts9\jdk1\jre\lib\ext\cldrdata.jarE:\java\tts9-v2-win-x64\tts9\jdk1\jre\lib\ext\dnsns.jarE:\java\tts9-v2-win-x64\tts9\jdk1\jre\lib\ext\jaccess.jarE:\java\tts9-v2-win-x64\tts9\jdk1\jre\lib\ext\jfxrt.jarE:\java\tts9-v2-win-x64\tts9\jdk1\jre\lib\ext\localedata.jarE:\java\tts9-v2-win-x64\tts9\jdk1\jre\lib\ext\nashorn.jarE:\java\tts9-v2-win-x64\tts9\jdk1\jre\lib\ext\sunec.jarE:\java\tts9-v2-win-x64\tts9\jdk1\jre\lib\ext\sunjce_provider.jarE:\java\tts9-v2-win-x64\tts9\jdk1\jre\lib\ext\sunmscapi.jarE:\java\tts9-v2-win-x64\tts9\jdk1\jre\lib\ext\sunpkcs11.jarE:\java\tts9-v2-win-x64\tts9\jdk1\jre\lib\ext\zipfs.jarE:\java\tts9-v2-win-x64\tts9\jdk1\jre\lib\javaws.jarE:\java\tts9-v2-win-x64\tts9\jdk1\jre\lib\jce.jarE:\java\tts9-v2-win-x64\tts9\jdk1\jre\lib\jfr.jarE:\java\tts9-v2-win-x64\tts9\jdk1\jre\lib\jfxswt.jarE:\java\tts9-v2-win-x64\tts9\jdk1\jre\lib\jsse.jarE:\java\tts9-v2-win-x64\tts9\jdk1\jre\lib\management-agent.jarE:\java\tts9-v2-win-x64\tts9\jdk1\jre\lib\plugin.jarE:\java\tts9-v2-win-x64\tts9\jdk1\jre\lib\resources.jarE:\java\tts9-v2-win-x64\tts9\jdk1\jre\lib\rt.jarD:\IDEAProject\leyou\code\demo7\out\production\test-encoding-java b.Test2

以下是maven工程执行时的命令行(已加入了-Dfile.encoding=utf-8参数):

没有加参数,则红色行里没有-Dfile.encoding=UTF-8

E:\java\tts9-v2-win-x64\tts9\jdk1\bin\java.exe
-Dmaven.multiModuleProjectDirectory=D:\IDEAProject\leyou\code\demo7\test-encoding 
        -DarchetypeCatalog=internal -Dmaven.home=D:\java_tool\apache-maven--Dclassworlds.conf=D:\java_tool\apache-maven-\bin\m2.conf 
        +
        +
        -Dfile.encoding=UTF--classpath D:\java_tool\apache-maven-\boot\plexus-classworlds-.jar 
        org.codehaus.classworlds.Launcher -Didea.version2019-s D:\java_tool\apache-maven-\conf\settings.xml 
        -Dmaven.repo.local=D:\heima\.m2\repository -Dexec.workingdir=D:\IDEAProject\leyou\code\demo7 
        -Dexec.executable=E:\java\tts9-v2-win-x64\tts9\jdk1\bin\java.exe exec:exec

检查jvm默认编码

import java.io.ByteArrayOutputStream;

import java.io.OutputStreamWriter;

import java.nio.charset.Charset;

class HelloWorld {

    public static void main(String[] args) {

        System.out.println("Default Charset=" + Charset.defaultCharset());//gbk

        System.out.println("file.encoding=" + System.getProperty("file.encoding"));//gbk

        System.out.println("Default Charset in Use=" + getDefaultCharSet());//gbk

    }

    private static String getDefaultCharSet() {

        OutputStreamWriter writer = new OutputStreamWriter(new ByteArrayOutputStream());

        String enc = writer.getEncoding();

        return enc;

    }

}


jvm启动参数设置-Dfile.encoding=utf-8

注意事项:开发工具里project设置为utf-8,同时设置-Dfile.encoding=utf-8

转自 https://blog.csdn.net/jv_csjh/article/details/78581826


-Dfile.encoding解释:
在命令行中输入java,在给出的提示中会出现-D的说明:
-D=  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这个属性中获取的。个人感觉这个是最重要的一个因素。下面的三个可以看看。

/**
     * Returns the default charset of this Java virtual machine.
     *
     *

The default charset is determined during virtual-machine startup and
     * typically depends upon the locale and charset of the underlying
     * operating system.

     *
     * @return A charset object for the default charset
     *
     * @since 1.5
     */
    public static Charset defaultCharset() {
        if (defaultCharset == null) {
     synchronized (Charset.class) {
   java.security.PrivilegedAction pa =
      new GetPropertyAction("file.encoding");
   String csn = (String)AccessController.doPrivileged(pa);
   Charset cs = lookup(csn);
   if (cs != null)
      defaultCharset = cs;
                else 
      defaultCharset = forName("UTF-8");
            }
}
return defaultCharset;
}

在java.net包中的URLEncoder.java中的static块里面:
dfltEncName = (String)AccessController.doPrivileged (
      new GetPropertyAction("file.encoding")
     );
在javax.print包中的DocFlavor.java
static {
   hostEncoding = 
      (String)java.security.AccessController.doPrivileged(
                   new sun.security.action.GetPropertyAction("file.encoding"));
     }
在com.sun.org.apache.xml.internal.serializer包中的Encodings
// Get the default system character encoding. This may be
                 // incorrect if they passed in a writer, but right now there
                 // seems to be no way to get the encoding from a writer.
                 encoding = System.getProperty("file.encoding", "UTF8");

转自 https://blog.csdn.net/belalds/article/details/80811824

mac系统中,Jar Launcher.app启动jar文件时,file.encoding属性变成MacRoman

转自 https://blog.csdn.net/haixia_12/article/details/42424513

未解决的问题:

java工程中,file.encoding无论是gbk还是utf-8,控制台都不会中文乱码

idea和cmd已做实验验证。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多