300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Maven 命令行中 字符编码 设置

Maven 命令行中 字符编码 设置

时间:2020-01-31 15:20:09

相关推荐

Maven  命令行中 字符编码 设置

目录

■前言(遇到的问题)

■具体操作 (尝试命令行设置 mavne 运行环境编码)

1.设置环境变量

2.效果

■解决办法 (在POM中指定 java 运行时的 编码格式)

■扩展

1.java代码中检测操作系统语言(语言环境)

(上面的4,5,6行) 不受下面的命令影响,但是,下面参数不指定时,(9.10行)使用默认使用系统环境的语言。

Linux 查看系统环境语言命令

2.Java如何在创建文件时指定编码

3.编码格式

4.Maven命令行操作

5.maven-surefire-plugin

6.Junit (私密)

■源码分析(getBytes()方法 受 file.encode 设定影响的原因)

■前言(遇到的问题)

Eclipse中运行Junit

通过Maven命令 mvn clean test 运行Junit得到的结果不一样

模拟代码

package com.sxz.test;public class TestEncode {public static void main(String[] args) {// TODO Auto-generated method stubString str = "ア"; // 实际程序中, 设置是变量int length = str.getBytes().length; System.out.println(length); // 实际程序中, length 作为逻辑判断使用}}

(日语中,半角 ア

Eclipse中运行,被判定为 3个字节。// UTF-8Common中,选择(Encode) UTF-8

相当于:java -Dfile.encoding=UTF-8 TestEncode

windows 命令行 中运行,被判定为 1 个字节。// MS932 (Shift JIS)WIndow 采用的编码

相当于:java -Dfile.encoding=SJIS TestEncode

ST环境(Linux)中运行,被判定为X个字节。

X是多少,要看环境的语言环境,使用【locale】命令来查看系统默认语言的编码,

・如果是UTF-8, 那么还是3个字节(目前我们使用的环境,虽然是linux系统,但是默认字符集是UTF-8)

・如果是EUC-JP,那么是两个字节

// EUC-JPEUC-JP是被Linux和Solaris广泛地使用的文字编码。

相当于:java -Dfile.encoding=EUC-JPTestEncode

怀疑和编码格式有关,所以进行了相关调查。

(确实和编码有关, 是和Java运行时的编码有关。)

下面是Eclipse 中 Junit中的设定

---------------------------------------------------------------------

inherited 英 [ɪnˈherɪtɪd] adj. 通过继承得到的,遗传的 v. 继承(inherit的过去式和过去分词)

デフォルト-継承(U)(UTF-8)

(这里的继承,指的 是继承java文件的编码格式)

---------------------------------------------------------------------

注意:Eclipse中的这个设定,对应的 java命令行参数是 -Dfile.encoding=UTF-8 // 指定JVM运行时所采用的编码

■具体操作 (尝试命令行设置 mavne 运行环境编码)

1.设置环境变量

set MAVEN_OPTS= -Duser.language=UTF-8 -Dfile.encoding=UTF-8

2.效果

----

Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)

Maven home: C:\Nane\Program Files\apache-maven-3.6.3\bin\..

Java version: 1.8.0_191, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jdk1.8.0_191\jre

Default locale: utf-8_CN, platform encoding: UTF-8

OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

----

■解决办法 (在POM中指定 java 运行时的 编码格式)

安装以上设定,虽然,貌似已经修改了java运行时的 编码格式

但是,在实际运行时,还是按照 MS932 的编码格式运行了。

要直接修改POM文件,在POM文件中指定编码格式,才能解决问题!

<argLine>${argLine} -Xmx1024m -Dfile.encoding=UTF-8</argLine>

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.22.1</version><configuration><argLine>${argLine} -Xmx1024m -Dfile.encoding=UTF-8</argLine><!--<skipTests>true</skipTests>--></configuration></plugin>

最终设置编码如下(选择实际运行环境的编码 UTF-8)

× <argLine>${argLine} -Xmx1024m -Dfile.encoding=EUC-JP</argLine>〇 <argLine>${argLine} -Xmx1024m -Dfile.encoding=UTF-8</argLine>

虽然实际运行的环境是,linux环境,而且java运行时,没有指定 编码方式 (使用系统默认的编码方式)

但是,系统的默认的编码方式,并不是 EUC-JP,而是UTF-8

使用下面命令,便可查看系统的默认编码方式

locale

扩展

1.java代码中检测操作系统语言(语言环境)

import java.util.Locale;import java.nio.charset.Charset;...System.getProperty( Locale.getDefault() );System.getProperty( System.getProperty("user.country") );System.getProperty( System.getProperty("user.language") );System.out.println(System.getProperties().get("file.encoding"));System.out.println(Charset.defaultCharset());

(上面的4,5,6行) 不受下面的命令影响,但是,下面参数不指定时,(9.10行)使用默认使用系统环境的语言。

java -Dfile.encoding=UTF-8 TestEncode

Linux 查看系统环境语言命令

locale

sxz001@sxzap01:~$ localeLANG=ja_JP.UTF-8LANGUAGE=LC_CTYPE="ja_JP.UTF-8"LC_NUMERIC="ja_JP.UTF-8"LC_TIME="ja_JP.UTF-8"LC_COLLATE="ja_JP.UTF-8"LC_MONETARY="ja_JP.UTF-8"LC_MESSAGES="ja_JP.UTF-8"LC_PAPER="ja_JP.UTF-8"LC_NAME="ja_JP.UTF-8"LC_ADDRESS="ja_JP.UTF-8"LC_TELEPHONE="ja_JP.UTF-8"LC_MEASUREMENT="ja_JP.UTF-8"LC_IDENTIFICATION="ja_JP.UTF-8"LC_ALL=sxz001@sxzap01:~$

---

2.Java如何在创建文件时指定编码

・读取文件FileInputStream fis=new FileInputStream(“xxxx.txt”);・写文件OutputStreamWriter osw=new OutputStreamWriter(fis,“UTF-8”);

Java API 8官方文档,File没有提供可以指定字符编码的构造函数。(即,读取文件时,没有办法指定编码格式)

---

3.编码格式

文件编码 ANSI、GBK、GB2312、MS936、MS932、SJIS、Windows-31 、EUC-JP 、EBCDIC 等等之间的区别与联系_sun0322的博客-CSDN博客_sjis编码

---

对于 Shift-JIS 编码的理解 (win10中 查看 Shift-JIS 编码 コード)_sun0322的博客-CSDN博客_shift-jis

---

4.Maven命令行操作

在 命令行 (cmd)执行 Maven命令,对java工程进行打包 操作 (指定settings.xml)_sun0322的博客-CSDN博客_mvn命令在cmd执行

--

5.maven-surefire-plugin

在默认情况下,maven-surefire-plugin的test目标会自动执行测试源码路径(默认为src/test/java/)

下所有符合一组命名模式的测试类。这组模式为:**/Test*.java:任何子目录所有命名以Test开头的Java类。**/*Test.java:任何子目录下所有命名以Test结尾的Java类。**/*TestCase.java:任何子目录下所有命名以TestCase结尾的Java类。

6.Junit (私密)

Junit笔记(Mockito)_sun0322的博客-CSDN博客

---

Java反射学习,Junit中的应用(JMockit)_sun0322的博客-CSDN博客

---

■源码分析(getBytes()方法 受 file.encode 设定影响的原因)

补充,对于String定义的变量, 取得size时,其实不受到任何影响,String定义的变量,每个字符,是以Unicode编码形式存储的。

文件编码 ANSI、GBK、GB2312、MS936、MS932、SJIS、Windows-31 、EUC-JP 、EBCDIC 等等之间的区别与联系_sun0322的博客-CSDN博客_sjis编码

但是,使用 getBytes()方法时,却会受到影响!

public final class Stringimplements java.io.Serializable, Comparable<String>, CharSequence {。。。public byte[] getBytes() {return StringCoding.encode(value, 0, value.length);}

下面代码第6行 :String csn =Charset.defaultCharset().name();

class StringCoding {。。。static byte[] encode(char[] ca, int off, int len) {String csn = Charset.defaultCharset().name();try {// use charset name encode() variant which provides caching.return encode(csn, ca, off, len);} catch (UnsupportedEncodingException x) {warnUnsupportedCharset(csn);}try {return encode("ISO-8859-1", ca, off, len);} catch (UnsupportedEncodingException x) {// If this code is hit during VM initialization, MessageUtils is// the only way we will be able to get any kind of error message.MessageUtils.err("ISO-8859-1 charset not available: "+ x.toString());// If we can not find ISO-8859-1 (a required encoding) then things// are seriously wrong with the installation.System.exit(1);return null;}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。