- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
从 Java 1.7 开始,StandardCharsets 是标准库的一部分,但我使用了很多在实现之前编写好的遗留代码。每当我遇到它时,我都会用 StandardCharsets 替换它(主要是为了使代码更漂亮/更干净),但我担心在具有性能关键部分或我无法轻松调试的区域进行这些更改。
不使用标准字符集是否有任何技术原因?比如,使用 StandardCharsets 而不是 Guava 字符集或诸如 getBytes("UTF-8") 之类的东西是否会导致“陷阱”或效率低下?我知道“这些字符集保证在 Java 平台的每个实现上都可用。”,但我不知道它们是否更慢或有旧方法没有的怪癖。
为了尽量保持这个主题,假设没有主观力量影响它,比如其他开发人员的偏好、对改变的抵制等。
此外,如果它有任何影响的话,UTF-8 是我真正关心的编码。
最佳答案
As in, are there 'gotchas' or inefficiencies that might arise from using StandardCharsets instead of Guava charsets or something like getBytes("UTF-8")?
首先,java.nio.charset.StandardCharsets.UTF_8
(在OpenJDK/Oracle JDK中实现),com.google.common.base.Charsets.UTF_8
和 org.apache.commons.io.Charsets.UTF_8
的实现完全相同:
public static final Charset UTF_8 = Charset.forName("UTF-8");
因此,至少,您不必担心与 Guava 字符集或 Charset.forName("UTF-8")
的差异。
至于 String.getBytes(String)
和 String.getBytes(Charset)
,我确实在文档中看到了不同之处:
String.getBytes(Charset)
:“此方法总是用此字符集的默认替换字节数组替换格式错误的输入和不可映射的字符序列。”。String.getBytes(String)
:“未指定此字符串无法在给定字符集中编码时此方法的行为。”。因此,根据您使用的 JRE,我预计 someString.getBytes("UTF-8")
和 someString.getBytes 在处理不可映射字符方面可能存在差异(StandardCharsets.UTF_8)
。
关于java - 有什么技术原因不在 Java 中使用 StandardCharsets 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37167375/
我需要将字符串从字节编码和解码为 dn 的工作代码。如何编写才能在所有平台上获得相同的结果? String s = "test"; byte[] b = s.getBytes(StandardChar
如果我要使用以下代码创建一个 InputStreamReader, new InputStreamReader(anInputStream, "UTF-8") 我必须捕获 UnsupportedEnc
我在 StandardCharsets 下收到一条错误行。我已导入它,所以我不确定为什么会出现 StandardCharsets 无法解析为变量 错误。 import java.util.*; imp
读取文件时出现如下异常, java.nio.charset.MalformedInputException - Input length = 1 在获取阅读器时使用以下选项有什么区别? 选项 1: r
从 Java 1.7 开始,StandardCharsets 是标准库的一部分,但我使用了很多在实现之前编写好的遗留代码。每当我遇到它时,我都会用 StandardCharsets 替换它(主要是为了
我可以在模拟器中运行我的应用程序,但在装有 Jelly Bean OS 的设备上我会崩溃。知道为什么吗? 07-04 12:51:57.576 18243-18279/com.j4nos.movieb
我正在使用此代码将斯堪的纳维亚字符正确发布到 php。 这里的问题是 API 19 之前不支持 StandardCharsets.UTF_8 byte[] postData = urlParamete
我有这段代码,它在 AVD 上成功运行: package com.mohammadfs.sample; import android.app.Activity; import android.os.B
我的应用程序当前正在通过正常的 SMTP 访问发送电子邮件,并且在 SDK 19+ 设备中工作正常,但在我的 Asus Android 4.3 SDK 18 中出现问题,并出现标题中所述的错误。 奇怪
我是一名优秀的程序员,十分优秀!