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,一经查实,立即删除!

相关文章

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 光纤放大器及其在光纤通…

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语言学习概述

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

小狐狸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基本语法(三)

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

Matlab入门(一)

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

MATLAB入门(二)

可以使用 plot 函数在一张图上绘制两个相同长度的向量。 plot(x,y)plot 函数接受一个附加参数。使用该参数&#xff0c;您可以通过在引号中包含不同符号的方式来指定与之对应的颜色、线型和标记样式。 plot(x,y,"r--o")以上命令将会绘制一条红色 虚线 (–)&#x…

Spring @Lazy批注用例

Spring框架几乎可以毫不费力地为您解决许多常见的编程问题&#xff0c;但是它的某些功能比其他功能鲜为人知。 在本文中&#xff0c;我们将仔细研究属于该组的Lazy批注。 阅读了几个示例之后&#xff0c;您应该能够将注释应用于日常开发任务。 1. 懒豆初始化 Spring的默认行为…

MATLAB入门(三)

求平均值 两种方法生成列向量 读取文件 将数据保存到小数点后两位 result round(M,2);将矩阵中的每个元素都三次方 x3 x.^3将矩阵中的数据按照升序排序 sort(data)创建一个行变量计算每一个列变量的平均值 avg mean(data)diff函数 Y diff(X) 计算沿大小不等于 1…

Java学习 第三章 数组(一)一维数组

第三章 数组 3-1 数组的概述 数组&#xff1a;多个相同类型数据按一定的顺序排列的集合&#xff0c;并使用一个名字命名&#xff0c;并通过编号的方式对这些数据进行统一管理。 数组相关概念&#xff1a; 数组名、下标&#xff08;索引、角标&#xff09;、元素、数组的长度 数…

几个有用的word小技巧,保准提升效率~

这几天改报告改到头秃。年底了&#xff0c;实验室各种项目在结项&#xff0c;作为一名研一新生&#xff0c;理所应当地承担起了体力活的工作。主要负责项目报告的研究背景调研、报告汇总、格式调整等。 格式调整&#xff0c;看起来非常简单的一项工作&#xff0c;却是最费时费…

Java学习 第三章 数组(二)多维数组

多维数组的使用 由数组构成的数组 二维数组&#xff1a; ① 二维数组的声明和初始化 ② 如何调用数组的指定位置的元素 ③ 如何获取数组的长度 ④ 如何遍历数组 ⑤ 数组元素的默认初始化值 &#xff1a;见ArrayTest1.java 数组元素是整形&#xff1a;0 数组元素是浮点型&…

Spring Boot 2中的功能切换

无论您是否喜欢&#xff0c;软件开发都是一项协作活动。 整合工作一直被妖魔化&#xff0c;并被视为必不可少的邪恶。 有几种方法可以解决有效集成的挑战。 功能切换开关属于该组。 在本文中&#xff0c;您将在实践中看到如何在Spring Boot应用程序中使用功能切换&#xff08;也…

Java学习 第三章 数组(三)排序算法

** Java学习 第三章 数组&#xff08;三&#xff09;排序算法 ** 主要内容&#xff1a;排序算法、排序算法横向比较、Arrays工具类的使用、数组常见异常 1.数组中涉及到的常见算法&#xff1a;排序算法 1.1 排序算法分类&#xff1a;内部排序和外部排序 1.2 十大内部排序算…