`
RednaxelaFX
  • 浏览: 3053311 次
  • 性别: Icon_minigender_1
  • 来自: 海外
社区版块
存档分类
最新评论

让javac在中文系统上输出英文的信息

    博客分类:
  • Java
阅读更多
刚才有同事说在中文Windows上用maven-compiler-plugin出错了,因为用javac编译时输出的警告信息里有中文,而maven-compiler-plugin插件只能识别英文结果就错了。所以想找办法让javac输出英文信息。

我虽然没在用maven-compiler-plugin遇到这个问题,不过之前也一直想让javac输出英文信息。这次顺便把找方法的过程记下。

javac本身是用Java写的,选取字符串资源时会受到底下的JVM的语言状态影响。那么问题就转变为如何让JVM用英文环境来执行(同时还得继续使用GBK编码作为默认编码,不然有些文件的读取就不对了)。
其实问题不在系统是不是中文的,而在“国家”是不是中国。
通过设定Java的系统属性 user.country ,就可以任意指定JVM“认为”的当前所在国家;用于指定文件的默认编码的系统属性则是 file.encoding ,跟国家是分开的。
这里所说的“系统属性”是指在Java程序中通过 java.lang.System.getProperty() 能获取到的那些属性。



如果用java/java.exe来启动JVM,那么在命令行上使用 -Duser.country=US 就可以把国家指定为美国。用javac/javac.exe来启动javac编译器则需要再多加个-J在前面,也就是 -J-Duser.country=US 。

例子如下:

Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.

D:\>javac
用法:javac <选项> <源文件>
其中,可能的选项包括:
  -g                         生成所有调试信息
  -g:none                    不生成任何调试信息
  -g:{lines,vars,source}     只生成某些调试信息
  -nowarn                    不生成任何警告
  -verbose                   输出有关编译器正在执行的操作的消息
  -deprecation               输出使用已过时的 API 的源位置
  -classpath <路径>            指定查找用户类文件和注释处理程序的位置
  -cp <路径>                   指定查找用户类文件和注释处理程序的位置
  -sourcepath <路径>           指定查找输入源文件的位置
  -bootclasspath <路径>        覆盖引导类文件的位置
  -extdirs <目录>              覆盖安装的扩展目录的位置
  -endorseddirs <目录>         覆盖签名的标准路径的位置
  -proc:{none,only}          控制是否执行注释处理和/或编译。
  -processor <class1>[,<class2>,<class3>...]要运行的注释处理程序的名称;绕过默认
的搜索进程
  -processorpath <路径>        指定查找注释处理程序的位置
  -d <目录>                    指定存放生成的类文件的位置
  -s <目录>                    指定存放生成的源文件的位置
  -implicit:{none,class}     指定是否为隐式引用文件生成类文件
  -encoding <编码>             指定源文件使用的字符编码
  -source <版本>               提供与指定版本的源兼容性
  -target <版本>               生成特定 VM 版本的类文件
  -version                   版本信息
  -help                      输出标准选项的提要
  -Akey[=value]              传递给注释处理程序的选项
  -X                         输出非标准选项的提要
  -J<标志>                     直接将 <标志> 传递给运行时系统


D:\>javac -J-Duser.country=US
Usage: javac <options> <source files>
where possible options include:
  -g                         Generate all debugging info
  -g:none                    Generate no debugging info
  -g:{lines,vars,source}     Generate only some debugging info
  -nowarn                    Generate no warnings
  -verbose                   Output messages about what the compiler is doing
  -deprecation               Output source locations where deprecated APIs are u
sed
  -classpath <path>          Specify where to find user class files and annotati
on processors
  -cp <path>                 Specify where to find user class files and annotati
on processors
  -sourcepath <path>         Specify where to find input source files
  -bootclasspath <path>      Override location of bootstrap class files
  -extdirs <dirs>            Override location of installed extensions
  -endorseddirs <dirs>       Override location of endorsed standards path
  -proc:{none,only}          Control whether annotation processing and/or compil
ation is done.
  -processor <class1>[,<class2>,<class3>...]Names of the annotation processors t
o run; bypasses default discovery process
  -processorpath <path>      Specify where to find annotation processors
  -d <directory>             Specify where to place generated class files
  -s <directory>             Specify where to place generated source files
  -implicit:{none,class}     Specify whether or not to generate class files for
implicitly referenced files
  -encoding <encoding>       Specify character encoding used by source files
  -source <release>          Provide source compatibility with specified release

  -target <release>          Generate class files for specific VM version
  -version                   Version information
  -help                      Print a synopsis of standard options
  -Akey[=value]              Options to pass to annotation processors
  -X                         Print a synopsis of nonstandard options
  -J<flag>                   Pass <flag> directly to the runtime system


可以参考一下Mindprod上的一篇介绍
引用
The System properties are generated by a magic native method System.initProperties. There is no corresponding jar element or *.properties file on disk. file. You can temporarily add a System property with the -D option on the java.exe line. You can also use the technique to pass the value of a SET variable in as a system property.
  • 大小: 54.4 KB
分享到:
评论
3 楼 RednaxelaFX 2012-12-12  
logicmd 写道
Windows也没有Alias,还是我只是改一个编译的脚本,直接改即可。
另外楼主的图片窗口是怎么打开的啊?

图片?是说JConsole的截图么?如果JAVA_HOME在您的PATH上那直接jconsole即可;如果没在的话那 %JAVA_HOME%\bin\jconsole (%JAVA_HOME%没设的话替换为您的JDK安装路径)
2 楼 logicmd 2012-12-12  
Windows也没有Alias,还是我只是改一个编译的脚本,直接改即可。
另外楼主的图片窗口是怎么打开的啊?
1 楼 umeit 2011-08-18  
要是能在执行javac时自动加上这些参数就好了,不知道能不能实现?

相关推荐

    dotnet 6 命令行 cmd 设置输出英文解决中文乱码.rar

    本文档将详细阐述如何在Windows的CMD环境中设置命令行输出为英文,从而有效解决中文乱码问题。 首先,我们需要了解CMD的基本信息。CMD(Command Prompt)是Windows系统中的命令行接口,用于执行系统命令。在.NET 6...

    java中文乱码解决问题

    有时候,我们在中文系统平台下开发的 Web 应用程序移植到英文系统平台下,在 Servlet 和 JSP 中直接书写的中文字符串在输出时,将显示为乱码。这是因为在编译 Servlet 类或者 JSP 文件时,如果没有使用 -encoding ...

    免费 java中文乱码字符集处理大全.docx

    如果在非中文环境中运行,JVM需要将Unicode编码的字符转换为本地系统支持的编码,例如在英文Linux系统上,可能需要从Unicode转换为ASCII或ISO-8859-1。 4. 当Java程序输出中文字符到控制台、文件或网络时,JVM会...

    免费_java中文乱码字符集解决大全

    2. Java是跨平台编程语言,编写的程序不仅能在中文Windows上运行,也能在中文Linux或其他系统上运行,甚至在英文系统上运行。这种移植操作若未妥善处理编码问题,也会带来中文乱码。 3. 当使用不支持中文的英文操作...

    java中文乱码字符集解决大全.pdf

    在解析和输出字符串时,JVM会根据系统属性`file.encoding`确定编码格式。 以中文Win2K为例,如果源文件使用GBK编码,javac会尝试将其转换为UTF-8编码,然后在运行时,JVM又需将UTF-8编码的字节码还原为GBK编码以...

    JAVA常见中文乱码问题解决方法

    2. JVM处理:JVM读取的.class文件是以Unicode编码的,但在不同平台上的输出(如控制台输出、文件写入)需要根据系统默认编码进行转换。 3. 浏览器和参数传递:浏览器通常使用UTF-8编码传递参数,如果服务器端未正确...

    java中文乱码字符集解决大全

    1. **源代码编写**:开发者在特定的操作系统上使用支持中文的编辑器编写Java源代码,该文件默认采用操作系统默认支持的编码格式(如GBK)保存。 2. **编译阶段**:Java源代码通过`javac`命令编译成`.class`文件。...

    Java编程乱码问题

    例如,当在中文Windows系统上,操作系统通常使用GBK或GB2312编码,而在英文系统上则可能是UTF-8或其他编码。如果这个转换过程出现问题,就会导致乱码。例如,一个在中文Windows上用GBK编码保存的文件,如果在不支持...

    java中文乱码问题详解--- java中文乱码问题详解

    但在实际应用中,Java程序可能会部署在不同编码环境的操作系统上(如中文Windows和英文Linux),这就涉及到了编码转换的问题。如果编码转换不当,很容易导致中文乱码的情况出现。 #### 二、Java中文问题的根本原因 ...

    java中文乱码字符集[参照].pdf

    然而,当这些字节码在不同的操作系统上运行,特别是那些不支持中文或者默认编码不同的系统(如英文版Linux)时,如果没有进行正确的编码转换,中文字符在输出时会显示为乱码。 在Web应用中,例如JSP、Servlet和EJB...

    java中文问题分析

    3. **跨平台兼容性**:Java的跨平台特性使得程序在不同的操作系统上运行,如从中文Windows移植到英文Linux,需要考虑不同系统对字符编码的支持,不一致的编码设置会导致中文乱码。 4. **网络传输与浏览器兼容**:...

    java编码格式(对常见的java中文乱码作出分析及提出解决方案)

    Java作为一种跨平台的语言,其内部采用Unicode编码,确保在各种系统上都能处理各种语言的文本。 然而,不同的操作系统和应用程序默认使用的编码格式可能不同。例如,中文Windows系统通常使用GBK或GB2312编码,而...

    Java 编程技术中汉字问题的分析及解决

    在Java编程技术中,汉字问题主要涉及到编码的处理和转换,因为Java的默认编码是UNICODE,而我们日常使用的文件和数据库可能采用GB2312或BIG5等编码方式。这种差异可能导致在读写汉字时出现乱码,影响程序的正常运行...

    java常见命令指南

    假设你在一台英文版的UNIX系统上开发一个需要支持中文界面的应用,为了确保应用在该系统上能够正常显示和处理中文,可以在启动Java应用时加入以下命令行参数: ```bash java -Dclient.encoding.override=GBK -Dfile...

    深入剖析Java编程中的中文问题及建议最优解决方法.pdf

    当Java程序在开发环境中创建时,比如在中文Windows系统中使用文本编辑器(如记事本)编写,文件会被保存为操作系统默认的GBK编码。然后,`javac`编译器将.java源文件编译为.class字节码文件。在这个过程中,Java...

    java中文乱码问题详解.pdf

    - 编程时,开发者在特定操作系统(如中文Win2K)上使用编辑器(如记事本)以GBK编码保存.java源文件。 - 使用JDK的javac编译器编译.java文件,Java编译器能够识别Unicode注释和字符串,但源文件的编码是GBK。 - ...

    Java编程中的中文问题以及解决方法

    - **跨平台问题**:Java程序在不同操作系统之间移植时可能出现中文乱码问题,尤其是在从中文操作系统移植到英文操作系统时。 - **网络传输问题**:当通过网络传输包含中文的数据时,如果没有正确指定传输数据的编码...

    JDBC程序高级技术.pdf

    2. **跨平台运行**:Java程序在不同的操作系统(如中文Windows和英文Linux)之间移植时可能出现中文显示错误。 3. **浏览器默认编码**:大多数浏览器默认使用UTF-8编码格式传递参数,这与中文编码格式不一致,可能...

    Java字符转换[参考].pdf

    这些属性可以用来设定JVM使用的字符编码,例如在英文操作系统中,可以通过命令行参数如`-Dclient.encoding.override=GBK -Dfile.encoding=GBK -Duser.language=zh -Duser.region=CN`来强制设置JVM为中文环境。...

Global site tag (gtag.js) - Google Analytics