今天给客户发版本号,突然发现报表导出内容为空,大小0字节.感到很奇怪,由于开发的时候都好好的,打包出来怎么会出现异常. 细看才后发现是 file_encoding这个java系统属性编码方式设置导致的. 开发的时候一般我们都在eclipse中把项目的 text file  encoding 这个属性设置为utf-8. 如图:

开发完,脱离eclipse之后我们相同须要指定该编码方式去运行java程序, 否则 当你输出System.getProperty("file.encoding")这个属性的时候,得到的结果就是系统默认的编码方式,

windows下通常是GBK. 指定编码方式也非常easy,  java  -Dfile.encoding=utf-8   xxxx (须要运行的class文件)

以下来看下 file.encoding 这个属性的英文解释.

This property is used for the default encoding in Java, all readers
and writers would default to use 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 not be changed dynamically even this property can be changed. So the conclusion is that the default encoding can’t be changed 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.

大致的意思主要以下几点:

1. java内全部的reader和 writer操作默认都是用 file.encoding这个系统属性作为编码方式的,看代码:

		//way1
String html1="<html>...</html>";
FileWriter writer1=new FileWriter(new File("C:\\xxxx.html"));
writer1.write(html1);
writer1.close(); //way2
String html2="<html>...</html>";
OutputStreamWriter writer2=new OutputStreamWriter(new FileOutputStream
(new File("C:\\xxxx.html")),"utf-8");
writer2.write(html2);
writer2.close();

第一种方法默认会用 file.encoding 这个属性对文件进行编码,然后输出.一旦你运行class文件的时候没有指定该属性, 默认就会用操作系统本身编码方式,如gbk等.

另外一种方式指定了文件编码方式,并输出.

偶项目中的遇到异常就是由第一种方法导致的,刚開始我用另外一种方式去解决的,可是这仅仅能解决这一地方,其它没发现的就不好攻克了. 更好的解决,看注意点2.

2.JVM启动之前假设未指定file.encoding这个属性,这个属性就会默觉得操作系统编码方式, JVM启动假设指定了file.encoding这个属性,整个项目都会用这个属性

作为reader和writer操作的默认编码方式.

so,解决这个问题最好的方式就是在启动项目时就知道file.encoding这个属性,兴许的读写操作没有特殊编码须要的划,都能够继承过来使用.

java File_encoding属性的更多相关文章

  1. atitit.java给属性赋值方法总结and BeanUtils 1.6.1 .copyProperty的bug

    atitit.java给属性赋值方法总结and BeanUtils 1.6.1 .copyProperty的bug 1. core.setProperty(o, "materialId&qu ...

  2. java系统属性

    java系统属性 1. java.runtime.name:java的运行环境名称. 2. sun.boot.library.path:jdk\jre中的bin的路径 3. java.vm.versi ...

  3. Java操作属性文件,支持新增或更新多个属性

    Java操作属性文件.支持新增或更新多个属性 一.更新或新增单个属性的方法 /** * 写入properties信息 * @param filePath 绝对路径(包含文件名称和后缀名) * @par ...

  4. java自定义注解知识实例及SSH框架下,拦截器中无法获得java注解属性值的问题

    一.java自定义注解相关知识 注解这东西是java语言本身就带有的功能特点,于struts,hibernate,spring这三个框架无关.使用得当特别方便.基于注解的xml文件配置方式也受到人们的 ...

  5. java的属性只能在类里面 方法外面定义

    java的属性只能在类里面 方法外面定义 区别于python:python 既能在类里面(类属性) 又能在方法里面定义属性(实例属性)

  6. java:Properties属性文件概念

    java:Properties属性文件概念 在java之前的国际化程序中提出了一个属性文件的概念,属性文件的后缀是:*.properties,那么在java中提供了意个属性文件的专门操作类,Prope ...

  7. spring:使用<prop>标签为Java持久属性集注入值

    spring:使用<prop>标签为Java持久属性集注入值 使用 spring 提供的<prop>为Java持久属性集注入值,也就是向 java.util.Propertie ...

  8. 改变JAVA窗体属性的操作方法

    在本篇内容里小编给大家详细分析了关于改变JAVA窗体属性的操作方法和步骤,需要的朋友们学习下. 若将JDK版本升级到最新版本,Java窗体就可以简单实现窗体的透明效果,用户可以通过拉动滑块(Slide ...

  9. properties文件属性值@Value注解为 java entity属性赋值

    一.使用@Value为 java entity类中的非static属性赋值 举个栗子,一目了然 1.1 properties文件 1.2 servlet.xml 文件增加的配置: 1.2.1 serv ...

随机推荐

  1. python基础一 day2 字符串操作

    s.capitalize()  s.upper()  s.lower() s.swapcase()   s.title()  s.center(20,"#")   s.expand ...

  2. 《编译原理》画 DAG 图与求优化后的 4 元式代码- 例题解析

    <编译原理>画 DAG 图与求优化后的 4 元式代码- 例题解析 DAG 图(Directed Acylic Graph)无环路有向图 (一)基本块 基本块是指程序中一顺序执行的语句序列, ...

  3. Socket通信时服务端无响应,客户端超时设置

    背景:在写一个客户端的socket程序,服务端没有返回消息,客户端一直在等待. 目标:我需要设置一个时间,如果超过这个时间客户端自动断开连接.最好是在服务端实现,客户端对我来说不可控.

  4. Centos7 使用firewall管理防火墙

    一.Centos7使用firewall的管理防火墙 1.firewalld基本使用 启动:systemctl start firewalld 关闭:systemctl stop firewalld 状 ...

  5. SHELL二十篇(读书笔记)

    一.文件安全与权限 1.系统默认情况下建立文件与目录的权限: 系统默认情况下建立文件与目录的权限是: #vi /etc/bashrc 可以看到一般用户是002  root用户是022 说明:一般用户默 ...

  6. Couchbase V(管理任务)

    Couchbase V(管理任务) 多读写 在Couchbase2.1中支持硬盘多读些(Multi- Readers and Writers),一般双核4G服务默认3个thread 4核16G内存一个 ...

  7. Backspace doesn't delete inner html tags of a contenteditable DIV in Firefox

    https://bugzilla.mozilla.org/show_bug.cgi?id=439808 backspace键 在ff下不能使用  div contenteditable=true时

  8. bootspring + mybaits +mysql Date 类型的处理

    mysql 中有date 类型的属性,java实体类中对应的属性是java.sql.Date 类的. 最初的bug是怎么新增,joinDate 值都是null. 千辛万苦学会了用String转Date ...

  9. 如何设置目标并发(或者目标RPS)?

    基本概念 首先您需要了解什么是并发用户.TPS 和它们之间的关系. 并发用户:指的是现实系统中同时操作业务的用户,在性能测试工具中一般称为虚拟用户(Virutal User).一般是站在客户侧评估的角 ...

  10. LoadRunner之并发用户数与迭代关系---并发数与迭代的区别

    Q1: 例如在LR里,我要测100个用户同时并发登陆所用时间,那我是不是在录制好脚本后,需要参数化“用户名”,“密码”以及在那个记事本里构造100个真实的用户名和密码? 然后运行Controller, ...