Java可能使用UTF-8作为其默认字符集

由于基于Java的应用程序通常用于各种各样的操作系统和环境中,因此Java开发人员经常会遇到与基于字符的输入和输出有关的问题 。 涉及这些问题的博客文章包括《警察的恐怖:默认语言环境,默认字符集和默认时区》 ; 注释JDK默认数据 ; 编码问题:适用于linux和Java应用程序的解决方案 ; 愚蠢的Java字符串 ; Java:字符编码的粗略指南 ; 这篇文章标题太长,不能在这里列出 。

多年来,对Java进行了一些增强,以减少这些问题,但是当隐式使用默认字符集时,有时仍然存在一些问题。 《 Java Puzzlers 》一书中有一个难题(难题18),描述了与Java中“默认字符集的变量”有关的古怪之处。

由于所有这些与Java的默认字符集有关的问题,欢迎 JEP 草案 “ 使用UTF-8作为默认字符集 ”( JDK-8187041 )出现。 除了潜在地解决与默认字符集有关的问题外,该JEP还提供了有关这些问题的详细概述以及解决这些问题的替代方案。 JEP的“动机”部分目前总结了此JEP为何重要的原因:“使用默认字符集的API对Java平台的新开发人员来说是一种危害”,“对于有经验的开发人员来说,也是一个麻烦。”

“默认”字符集的问题由于使用不同的字符集以及JDK API中当前可用的不同方法(导致多个“默认”)而变得更加复杂。 这是要考虑的问题的细分。

  • 描述文件内容字符集的“默认”字符集可能与描述文件路径字符集的“默认”字符集不同。
    • Java系统属性file.encoding指定文件内容的默认字符集,其设置是java.nio.charsets.Charset.defaultCharset()返回的值。
  • 与用于读取/写入文件内容的字符集有关的“默认”有两种类型。
    • 某些JDK方法不允许指定字符集,并且始终仅针对该特定方法且不考虑任何语言环境或系统配置,都采用UTF-8的“默认”字符集。

JEP 草案 “ 使用UTF-8作为默认字符集 ”将帮助解决与默认用于读取和写入文件内容的字符集有关的不同类型“默认”相关的问题。 例如,它将消除使用平台默认方法写入文件并使用始终使用UTF-8的方法读取文件(无论平台默认字符集如何)可能引起的潜在冲突。 当然,仅在平台默认不是NOT UTF-8的情况下,这才是问题。

以下Java代码是一个简单的类,可打印出一些与字符集相关的设置。

显示默认字符集详细信息

package dustin.examples.charset;import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.util.Locale;import static java.lang.System.out;/*** Demonstrate default Charset-related details.*/
public class CharsetDemo
{/*** Supplies the default encoding without using Charset.defaultCharset()* and without accessing System.getProperty("file.encoding").** @return Default encoding (default charset).*/public static String getEncoding(){final byte [] bytes = {'D'};final InputStream inputStream = new ByteArrayInputStream(bytes);final InputStreamReader reader = new InputStreamReader(inputStream);final String encoding = reader.getEncoding();return encoding;}public static void main(final String[] arguments){out.println("Default Locale:   " + Locale.getDefault());out.println("Default Charset:  " + Charset.defaultCharset());out.println("file.encoding;    " + System.getProperty("file.encoding"));out.println("sun.jnu.encoding: " + System.getProperty("sun.jnu.encoding"));out.println("Default Encoding: " + getEncoding());}
}

下一个屏幕快照显示了在基于Windows 10的笔记本电脑上运行此简单类的结果,而未明确指定任何与字符集相关的系统属性,仅指定了file.encoding系统属性,并指定了两个系统属性file.encodingsun.jnu.encoding

刚刚显示的图像演示了通过属性控制默认字符集的能力。 它还说明,对于此语言环境为en_US的 Windows环境,文件内容和文件路径的默认字符集均为windows-1252 ( Cp1252 )。 如果实现了本文中讨论的JEP草案 ,则即使对于Windows,文件内容的默认字符集也将更改为UTF-8。

当默认字符集更改为UTF-8时,在某些应用程序中可能会造成重大破坏。 JEP草案讨论了减轻这种风险的方法,包括通过预先将系统属性file.encoding预先设置为UTF-8来早期测试应用程序对更改的敏感性。 对于需要保留当前行为的情况(使用系统确定的默认字符集而不是始终使用UTF-8),JEP草案的当前版本建议支持指定-Dfile.encoding=SYSTEM

JEP当前处于草稿中,并且与任何特定的JDK版本都不相关。 但是,根据JDK邮件列表上的最新帖子 ,我很乐观地认为,在不久的将来,我们会将UTF-8视为JDK未来版本中的默认字符集。

翻译自: https://www.javacodegeeks.com/2018/02/java-may-use-utf-8-default-charset.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/348216.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

rest api_摆脱困境:向REST API添加验证

rest api我对此感到有些ham愧,但是直到昨天,我才知道我可以通过使用Valid和RequestBody批注将验证添加到REST API中。 这在Spring MVC 3.0中不起作用,由于某种原因,我没有注意到在Spring MVC 3.1中添加了对此功能的支持 。 我从不…

2020-08-07 光纤通信第二章知识点整理

目录 2.1 半导体激光器 2 2.1.1 激光原理的基础知识 2 2.1.2 激光激射条件 3 2.1.3 结构理论 4 2.1.4 典型分类 6 2.1.5 模式概念 7 2.1.6 基本性质 8 2.2 半导体发光二极管 10 2.2.1 工作原理 10 2.2.2 结构和分类 10 2.2.3 主要性质 10 2.3 光源的直接调制 11 2.3…

静态分析的教育方面

加入我们项目的新程序员经常会问我们是否具有自动格式化工具,以使Java代码看起来完全符合Qulice的期望。 (Quili是我们使用的静态分析器。)我总是回答说,拥有这样一个自动代码抛光器只会有害,不会帮助项目及其成员改进…

2020-08-14 光纤通信第三章知识点整理

目录 3.1 光接收机 2 3.1.1 光接收机的分类与性能指标 2 3.1.2 直接检测光接收机的构成及功能 2 3.2 光电检测器 3 3.2.1 PN结的光电效应 4 3.2.2 PIN光电二极管 4 3.2.3 雪崩光电二极管(APD) 6 3.3 放大电路及其噪声 7 3.3.1 噪声的数学处理 8 3.3.2 放…

2020-08-21 光纤通信第四章知识点整理

第四章 光纤通信系统 目录 4.1 模拟光纤通信 2 4.2 数字光纤通信系统和总体设计 3 4.2.1 数字光纤通信系统基本组成 3 4.2.2 数字光纤通信系统总体设计 4 4.3 数字光纤传输系统的性能指标 7 4.3.1 误码性能 7 4.3.2 抖动、漂移性能 8 4.3.3 可用性 8 4.4 光纤放大器及其在光纤通…

scm maven_在运行时访问工件的Maven和SCM版本

scm maven您可以轻松地告诉Maven在JAR清单文件中包含工件的版本及其Git / SVN /…修订版,然后在运行时通过getClass()。getPackage访问该信息。 getImplementationVersion() 。 (所有功劳归功于MarkusKrger…

2020-08-24 光纤通信第五章知识点整理

第五章 无源光器件和WDM技术 目录 5.1 无源器件的几个常用性能参数 1 5.2 光纤和波导型无源光器件 2 5.2.1 光连接器和光耦合器 2 5.2.2 偏振控制器 3 5.2.3 光纤布拉格光栅 4 5.2.4 Mach-Zahnder滤波器 5 5.2.5 非线性环路镜 5 5.3 光学无源器件 6 5.3.1 偏振分束器 6 5.3.2 光…

使用Java 9向Javadoc搜索添加术语

有一个相对较旧的网页,称为“ Proposed Javadoc Tags ”,最初似乎是与Javadoc 1.2一起编写的,其中列出了“ Sun有朝一日可能会在Javadoc中实现的标签”。 在此列表中的标签是category , example , tutorial &#xff0…

Java学习、简单代码编译

【2.1】求明天是星期几 public class study { public static void main(String args[]) { short i7; short tomorrow,yesterday; tomorrow (short) ((i1) % 7); yesterday (short)((i-17) % 7); System.out.print(“tomorrow:”tomorrow" “”\n"); System.out.pr…

Java学习:类的封装、继承和多态

【3.1】声明日期类及使用日期对象 public class MyDate{ //类声明 int year,month,day; //成员变量,表示年月日 void set(int y,int m,int d) //成员方法、设计日期值 { yeary; monthm; dayd; } void set(MyDate d) //将当前对象值设置为参数值,重载 { …

同步器 java_您可能不知道的五个高级Java同步器

同步器 java除了基于每个Java对象具有的锁定位的通用同步外,您还可以使用Java中更复杂的同步器,例如: 信号量 –使用许可的概念表示一个位置中允许的最大线程数。 当使用值1时,其行为类似于同步,也称为二进制信号量。…

Java语言学习概述

md:创建新的文件夹 上面这行作用:将name:Tom,age12写入到文件1.doc中,也就是说先建个文档,再把这句话写进去。 del *.txt 作用:删除以txt结尾的所有文件 rd team2 作用:删除team2文件夹(且这…

在CDI应用程序中使用@Alternative

在许多情况下,您可能希望拥有一个以上版本的Bean,并将其用于不同的目的。 备用bean的典型理由是出于测试目的,其中备用bean提供模拟数据。 为了获得实时数据,“真实” bean必须连接到的实时系统的好处是远程,或者在测试…

小狐狸ChatGPT付费创作系统 前端对话提示undefined index:temperature解决方法

很多会员使用着ChatGPT付费创作系统,特别是新安装系统后前端输入对话时提示错误undefined index:temperature,检查了反代、检查了KEY均正常,这问题主要是因为后台设置里新用户免费送对话次数为空,没设置赠送次数原因,导…

第二章 Java基本语法(一)

本文主要内容: 关键字、标识符、变量、类型转换、进制转换、运算符 一、关键字 二、标识符 比如:类名,变量名,方法名,接口名,包名。。。 小技巧:直接在我的电脑输入cmd,就可以打开…

第二章 Java基本语法(二)

本文主要内容&#xff1a; 运算符、if-else、switch-case 一、位运算符 运算符之五&#xff1a;位运算符 每左移一位&#xff0c;相当于是在原来的基础上乘2. int i 21; System.out.println(“i<<2:”(i<<2)); 输出&#xff1a;i<<2:84 结论&#xff1a; …

java 断点_每个Java开发人员应拥有的持久断点

java 断点当开发人员使用Java进行工作时&#xff0c;即使您尝试调试其他内容&#xff0c;也总是会遇到一些失败的情况。 这是应该在每个IDE中启用的持久断点的列表。 &#xff08;恕我直言&#xff09; 是的&#xff0c;从理论上讲&#xff0c;您应该能够从良好的日志记录实现…

第二章 Java基本语法(三)

本文主要内容&#xff1a; 循环结构、特殊关键字break和continue的使用&#xff0c;质数问题的优化 循环结构&#xff1a;Boolean类型 程序编写&#xff1a; 从键盘输入两个正整数m和n&#xff0c;找出他们的最大公约数和最小公倍数。 import java.util.Scanner; public clas…

用Priam设置Cassandra

前面已经解释了如何在AWS中设置Cassandra 。 所描述的设置有效&#xff0c;但在某些情况下可能还不够。 例如&#xff0c;它不能为您提供制作和还原备份的简便方法&#xff0c;添加新节点依赖于自定义python脚本&#xff0c;该脚本会随机选择一个种子。 因此&#xff0c;现在我…

Matlab入门(一)

MATLAB学习笔记 本系列主要内容来源&#xff1a;matlab官方付费课程的学习笔记 截图较多&#xff0c;之后更新会尽量增加文字说明 matlab简单常用的命令 数组 round:四舍五入函数。