`
fengdao11
  • 浏览: 14217 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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

阅读更多
问题描述:
程序涉及到国际化问题,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=
               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");

另外另一个网友的博客上面看到的:
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.
分享到:
评论

相关推荐

    fastdfs-client-java-1.29-SNAPSHOT.jar

    mvn install:install-file -DgroupId=org.csource -DartifactId=fastdfs-client-java -Dversion=1.29-SNAPSHOT -Dpackaging=jar -Dfile=fastdfs-client-java-1.29-SNAPSHOT.jar pom.xml 文件中写入: <groupId>...

    olap4j-0.9.7.309-JS-3.jar包.rar

    下载之后再maven的bin目录下使用mvn命令:mvn install:install-file -Dfile=F:\apache-maven-3.5.3\mylib\olap4j-0.9.7.309-JS-3.jar -DgroupId=org.olap4j -DartifactId=olap4j-0.9.7.309-JS-3 -Dversion=0.9.7.309...

    jar-jconn3,ojdbc14-10.2.0.2.0,sigar-dist-1.6.3.82,sqljdbc4-4.0.0

    mvn install:install-file -DgroupId=org.hyperic -DartifactId=sigar-dist -Dversion=1.6.3.82 -Dpackaging=jar -Dfile=C:\Users\XXXXX\Desktop\sigar-dist-1.6.3.82.zip mvn install:install-file -DgroupId=org....

    阿里云点播jar包-aliyun-java-vod-upload-1.4.11.jar

    使用命令导入本地maven仓库。...mvn install:install-file -DgroupId=com.aliyun -DartifactId=aliyun-sdk-vod-upload -Dversion=1.4.11 -Dpackaging=jar -Dfile=aliyun-java-vod-upload-1.4.11.jar

    tabula-jar-1.2.1.zip

    2 需要Java环境支持,如果没有安装Java会自动打开网页,下载Java安装 3 安装完成后再次运行exe,会弹出命令终端窗口,然后会自动打开浏览器http://127.0.0.1:8080/ 4 浏览器里面就是软件操作界面 5 导入PDF文件,...

    taobao-sdk-java-auto.zip

    最新官方淘宝服务端SDK,5月18日更新,包含taobao-sdk-java.jar和taobao-sdk-java-source.jar两个文件,供大家下载研究。 maven安装命令:mvn install:install-file -Dfile=路径\xxx.jar -DgroupId=dingtalk-sdk-...

    hudi编译失败,不能通过maven自动下载的jar包

    mvn install:install-file -DgroupId=io.confluent -DartifactId=common-config -Dversion=5.3.4 -Dpackaging=jar -Dfile=./common-config-5.3.4.jar mvn install:install-file -DgroupId=io.confluent -DartifactId...

    tomcat值乱码解决

    最近几个项目,都出现了乱码问题。某些通过URL来传送、值为汉字的参数,在页面中显示的是乱码,但是在本地开发环境是正常显示的。排除的因素当然就是服务器的设置不当了,但具体是那些原因呢?一般我们所装的linux...

    spire.xls.free-2.2.0.jar和spire.xls.free-2.2.0.jar

    mvn install:install-file -Dfile=文件路径\spire.pdf.free-2.2.2.jar -DgroupId=e-iceblue -DartifactId=spire.pdf.free -Dversion=2.2.2 -Dpackaging=jar mvn install:install-file -Dfile=文件路径\spire.xls....

    ojdbc7-12.1.0.1.jar(适用于jdk1.7和1.8)

    因为在授权问题。maven不能下载,下载这个驱动包以后。在cmd里面执行mvn install:install-file -DgroupId=...

    java实现商城后台管理系统+H5端+小程序端+api后端接口(vue、java、springboot、mysql)

    功能 小商城功能 首页 专题列表、专题详情 ...java -Dfile.encoding=UTF-8 -jar litemall-all/target/litemall-all-0.1.0-exec.jar 启动管理后台前端 打开命令行,输入以下命令 npm install -g c

    arcgis-java-100.8.0.jar

    可用以下命令将jar文件部署在本地的maven仓库:mvn install:install-file -Dfile=arcgis-java-100.8.0.jar -DgroupId=com.esri.arcgisruntime -DartifactId=arcgis-java -Dversion=100.8.0 -Dpackaging=jar

    jasperreports mvn的依赖包olap4j-0.9.7.309-JS-3

    下载之后再maven的bin目录下使用mvn命令:mvn install:install-file -Dfile=F:\apache-maven-3.5.3\mylib\olap4j-0.9.7.309-JS-3.jar -DgroupId=org.olap4j -DartifactId=olap4j-0.9.7.309-JS-3 -Dversion=0.9.7.309...

    p3c-pmd-1.3.6.jar

    example : java -Dfile.encoding=utf-8 -cp p3c-pmd-1.3.6.jar net.sourceforge.pmd.PMD -d test.har -R rulesets/java/ali-comment.xml

    解决Tomcat中文乱码

    解决tomcat中文乱码的问题!!!!!! !!!!!!!!!!!!!!!!!!!

    jfinal-jfinal-master.zip_Java 8_cos-26Dec2008_cos-26Dec2008.pom_

    mvn install:install-file -DgroupId=com.jfinal -DartifactId=jetty-server -Dversion=8.1.8 -Dpackaging=jar -Dfile=jetty-server-8.1.8.jar 安装 cos-26Dec2008.jar mvn install:install-file -DgroupId=...

    房产中介项目,采用java、spring做后端,vue做前端,大学期间做的一个小组课设项目,代码手写真实

    房产中介管理系统,可用于自己的课设或者毕设也是足够了,整个项目实现了一个简单得房产中介管理系统,有管理员的后台管理,对房源,客源,员工,订单的增删改查。实现了对于数据统计的展示。用户的前台浏览页面,...

    vertica-jdbc-9.2.1-0.jar

    You can download the Vertica drivers here: ...mvn install:install-file -Dfile={/path_to/vertica-jdbc-9.2.1-0.jar} -DgroupId=com.vertica -DartifactId=vertica-jdbc -Dversion=9.2.1-0 -Dpackaging=jar

    tomcat源码分析

    tomcat源码分析

    olap4j-0.9.7.309-JS-3

    mvn install:install-file -Dfile=xxx\olap4j-0.9.7.309-JS-3.jar -DgroupId=org.olap4j -DartifactId=olap4j-0.9.7.309-JS-3 -Dversion=0.9.7.309-JS-3 -Dpackaging=jar 命令解释: mvn install:install-file:安装...

Global site tag (gtag.js) - Google Analytics