`
nlslzf
  • 浏览: 1045036 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Eclipse java文件中文乱码

阅读更多
http://hi.baidu.com/cnjsp/blog/item/e2954afb84b19c68024f5666.html
问题描述:
程序涉及到国际化问题,httpclient抓回来的数据乱七八糟的乱码,在转了几次编码之后在Myeclipse下可以获取正常编码的源码(准确的说是能显示一大部分,少部分内容依然乱码),但是将程序移植到eclipse下先前的程序就出现了乱码(移植工作曾经尝试过以下几种形式:1,程序从myeclipse中导出,然后再从Eclipse中导入;2,将Eclipse工作空间切换到myeclipse工作空间。然后将工程编码设置为utf-8)。如果将myeclipse工程使用fatjar打包为可执行jar包,然后在windows下运行的话还是乱码。而在Linux环境下是正常的。
在Linux上执行定时任务的时候出现乱码(最早的时候系统为默认的环境,安装好的系统没有对环境设置进行修改,这时候程序运行良好,当安装了一些涉及到语言之类的包以后,程序异常)。
问题分析:
Myeclipse、Eclipse中的工程编码都是utf-8
windows环境编码GBK、Linux环境下没有出现异常时默认编码是utf8、异常时虽然 系统环境显示utf-8,但是因为安装了一些涉及系统环境的包之后,对编码为utf-8有些 许怀疑
程序中转换的最终编码utf-8
怀疑对象是程序运行环境的默认编码问题
在使用java自带工具Java virtualVM分析程序内存、线程使用情况时,意外发现JVM arguments一项中的参数对在Eclipse和myeclipse下运行程序有所不同:Eclipse里面得参数只有-Xmx1024m而myeclipse下的程序则多出一项:-Dfile.encoding=UTF-8
在启动程序时多加上-Dfile.encoding=UTF-8参数,程序Eclipse中乱码消失,Linux下定时任务执行的程序也没有乱码了

-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这个属性中获取的。个人感觉这个是最重要的一个因素。下面的三个可以看看。
/**
     * Returns the default charset of this Java virtual machine.
     *
     * <p> 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");

另外另一个网友的博客上面看到的:
http://yaojingguo.blogspot.com/2009/02/javas-fileencoding-property-on-windows.html
Java's file.encoding property on Windows platfor
This property is used for the default encoding in Java, all readers and writers would default to using this property. file.encoding is set to the default locale of Windows operationg system since Java 1.4.2. System.getProperty("file.encoding") can be used to access this property. Code such as System.setProperty("file.encoding", "UTF-8") can be used to change this property. However, the default encoding can be not changed dynamically even this property can be changed. So the conclusion is that the default encoding can't change after JVM starts. java -dfile.encoding=UTF-8 can be used to set the default encoding when starting a JVM. I have searched for this option Java official documentation. But I can't find it.
分享到:
评论

相关推荐

    eclipse下properties文件中文乱码的解决方案

    对于Java源文件,其默认编码通常为GBK(在中文操作系统环境下),这确保了中文字符在Java文件中的正常显示与存储。然而,对于Properties资源文件,Eclipse的默认编码却设定为ISO-8859-1。这种编码方式无法正确识别和...

    JAVA反编译文件解决中文乱码

    本文将详细介绍如何解决JAVA反编译文件时的中文乱码问题。 首先,理解问题的根源:Java源代码默认采用UTF-8编码,但某些情况下,源代码可能使用了其他编码方式,如GBK。当这些源代码被编译成字节码后,再用不支持...

    java读取文件中文乱码

    在Java编程中,读取包含中文字符的文件时可能会遇到乱码问题,这通常是由于编码格式不匹配导致的。要解决这个问题,我们需要理解文件的原始编码格式,并在Java代码中正确地设置字符集。以下是一些相关的知识点: 1....

    Eclipse 开发JSP中文乱码解决方案

    在使用Eclipse进行JSP开发时,中文乱码是一个常见的问题,尤其是在处理包含中文字符的文件时。Eclipse作为一个强大的Java集成开发环境,虽然功能强大,但如果没有正确配置,可能会出现显示中文字符时的乱码现象。...

    Eclipse导入项目源码后中文乱码的解决办法

    Eclipse解决中文乱码问题 Eclipse是一个功能强大且广泛应用的集成开发环境(IDE),它支持多种编程语言,包括Java、C++、Python等。但是,在使用Eclipse时,经常会遇到中文乱码的问题,特别是在导入项目源码时。这...

    java中文乱码问题

    三、在 Eclipse 中运行 Java 文件乱码问题 我们在 Eclipse 中编译运行 Java 文件,可能看到的结果是类似这样的乱码:????。那么,这是为什么呢?我们先来看看整个字符的转换过程。 1. 在 Eclipse 窗口中输入中文...

    彻底解决中文乱码的问题

    中文乱码问题在Java中的表现多种多样,例如,从文件读取中文数据时显示为乱码,通过HTTP请求接收的中文内容显示异常,或者在控制台上打印中文字符出现乱码等。这些问题的根源在于编码的不统一,比如文件是GBK编码,...

    eclipse struts 中文乱码问题图解

    在开发Java Web应用程序时,Eclipse和Struts框架的组合可能会遇到中文乱码的问题,这主要涉及三个方面:页面乱码、参数乱码以及国际化乱码。以下是对这些乱码问题的详细解答: 1. 页面乱码: 当网页编码设置为非...

    Ubuntu下Eclipse中文乱码解决.docx

    "Ubuntu下Eclipse中文乱码解决" 在Ubuntu系统中使用Eclipse时,可能会遇到中文乱码的问题,特别是在将Windows下的工程导入到Linux下的Eclipse中时。这种情况下,中文字符可能会显示为乱码,影响开发工作的效率。这...

    Eclipse编译器中文乱码解决

    在使用Eclipse开发Java Web项目时,特别是在处理包含中文字符的jsp页面时,可能会遇到中文乱码的问题。这个问题主要是由于Eclipse默认的文件编码与页面实际使用的编码不一致导致的。这里我们将详细讨论如何解决...

    jsp eclipse乱码问题

    在开发基于Java的Web应用时,经常会遇到JSP页面在Eclipse环境中出现乱码的情况。这不仅会影响程序的正常运行,还可能导致用户体验下降。本文将针对JSP在Eclipse中的乱码问题进行深入分析,并提供相应的解决策略。 #...

    freemarker入门实例(解决乱码eclipse/java/编码方式UTF-8)

    本实例将引导你入门Freemarker,解决在Eclipse环境下使用Java编译时可能出现的乱码问题,并确保使用UTF-8编码方式进行处理。 **1. Freemarker简介** Freemarker是一个基于模板的开源Java库,它与Spring MVC、Struts...

    eclipse中解决资源文件中文乱码的插件

    Eclipse作为一个广泛使用的Java集成开发环境(IDE),在处理中文资源文件时可能会遇到乱码问题。针对这个问题,我们可以借助特定的插件来解决。这里提到的插件就是"eclipse中解决资源文件中文乱码的插件",它可以...

    idea中.properties文件中文显示乱码问题的解决 文件中文乱码1

    这行注释告诉Java解释器文件使用的是UTF-8编码,但这只对使用某些编辑器(如Eclipse)有效,对于IntelliJ IDEA本身并不起作用。 步骤四:使用插件 如果你依然遇到乱码问题,可以考虑安装支持`.properties`文件的...

    java、android项目在eclipse中显示中文乱码问题2

    在开发Java或Android项目时,Eclipse作为一款广泛使用的集成开发环境(IDE),有时会出现中文乱码的问题。这主要是由于编码格式不匹配导致的。以下是一些解决Eclipse中中文乱码问题的方法: 1. **修改工作空间的编码...

    java 读取文件乱码

    在Java编程中,遇到“java 读取文件乱码”的问题通常是由于编码格式不匹配导致的。当程序按照一种编码方式打开文件,而文件实际采用的是另一种编码时,就会出现乱码现象。解决这个问题需要理解Java中处理字符编码的...

    Java读取中文文件出现乱码解决过程.mht

    总之,解决Java读取中文文件乱码的关键在于确定正确的文件编码并相应地调整Java代码。同时,良好的编码规范,如统一项目编码为UTF-8,可以避免很多不必要的问题。在实际开发中,应当养成检查文件编码的习惯,避免因...

    eclipse导出程序出现乱码解决方法

    2. **源代码文件编码**:检查每个源代码文件(如.java文件)的编码。在Eclipse中,右键点击文件,选择“属性”,然后在“资源”选项卡中查看或更改编码。确保所有文件的编码与项目编码一致。 3. **导出JAR设置**:...

    java文件编码GBK转utf8完美解决方案

    idea、Eclipse等项目导入.java文件中文乱码完美解决方案:文件夹下所有GBK编码的.java一键转为utf-8,操作方式:将GBK2UTF8.jar文件考到需要转码项目目录,在当前位置运行控制台,输入命令java -jar GBK2UTF8.jar,...

Global site tag (gtag.js) - Google Analytics