java File_encoding属性

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


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

windows下一般是GBK. 指定编码方式也很简单,  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这个属性,后续的读写操作没有特殊编码需要的划,都可以继承过来使用.




### JavaFileFormat.Markdown 的 Maven 依赖 在 Java 开发中,如果需要处理 `FileFormat.Markdown` 类型的内容,则通常会引入支持 Markdown 解析和渲染的相关库。以下是常见的用于解析和转换 Markdown 文件的 Maven 库。 #### 常见的 Markdown 处理库 1. **CommonMark**: 这是一个基于 CommonMark 规范实现的纯 Java Markdown 解析器。 ```xml <dependency> <groupId>com.atlassian.commonmark</groupId> <artifactId>commonmark</artifactId> <version>0.20.0</version> </dependency> ``` 2. **Flexmark**: Flexmark 是一个功能强大的 Markdown 解析器,支持多种扩展语法。 ```xml <dependency> <groupId>com.vladsch.flexmark</groupId> <artifactId>flexmark-all</artifactId> <version>0.64.0</version> </dependency> ``` 3. ** PegDown**: PegDown 提供了一个灵活的 Markdown 转换工具,尽管它已经被标记为过时但仍被广泛使用。 ```xml <dependency> <groupId>org.pegdown</groupId> <artifactId>pegdown</artifactId> <version>1.6.0</version> </dependency> ``` 这些库可以满足大多数场景下的 Markdown 文件读取、解析以及渲染的需求[^3]。 #### 示例代码:如何加载并解析 Markdown 文件 以下是一段示例代码展示如何通过 `Flexmark` 将 Markdown 文本转换为 HTML: ```java import com.vladsch.flexmark.html.HtmlRenderer; import com.vladsch.flexmark.parser.Parser; import com.vladsch.flexmark.util.options.MutableDataSet; public class MarkdownProcessor { public static String markdownToHtml(String markdown) { MutableDataSet options = new MutableDataSet(); Parser parser = Parser.builder(options).build(); HtmlRenderer renderer = HtmlRenderer.builder(options).build(); return renderer.render(parser.parse(markdown)); } } ``` 此方法能够将输入的 Markdown 字符串转化为对应的 HTML 输出[^5]。 #### 关于编码设置 为了确保项目中的字符集一致,在 pom.xml 文件中建议配置如下属性来指定 UTF-8 编码: ```xml <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> </properties> ``` 这有助于防止因编码不匹配而导致乱码问题发生[^4]。 #### 总结 对于 Java 中涉及 `FileFormat.Markdown` 的需求,推荐选用上述提到的专业级开源库作为解决方案的一部分,并注意项目的全局编码设定以保障数据一致性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值