What is difference between String s = new String(s.getBytes(“UTF-8”),“UTF-8”); and String s = new String(s.getBytes(),“UTF-8”);
有什么区别
1 |
和
1 |
在第一个代码示例中,一些特殊字符被解码,为什么以及有什么区别?
如果我将
来自javadoc:
对于
Encodes this String into a sequence of bytes using the platform's default charset, storing the result into a new byte array.
Encodes this String into a sequence of bytes using the given charset, storing the result into a new byte array.
因此第二个版本允许您完全控制,第一个调用依赖于该平台的默认字符集。
这就是全部。
有关该"平台默认值",请参见此处的示例。请注意,人们要求将默认值设置为全部都是UTF-8(请参见此处)。
因此,您要询问以下两行:
1 2 |
这两条线都没有做任何有用的事情。第2行甚至比第1行还差;根据系统的默认字符编码,它可能不仅没有用,而且是错误的。
第1行实际上什么也没做。它使用UTF-8字符编码将字符串
第2行的功能取决于系统上使用的默认字符编码。如果默认字符编码为UTF-8,则它与第1行完全相同。如果它与UTF-8不同,则将得到错误解码的字符串。
假设系统的默认字符编码为ISO-8859-1。然后,第2行使用ISO-8859-1对字符串进行编码,然后立即对结果进行解码,就好像它是UTF-8一样-这是错误的。您可能会得到一个字符串,其中包含错误解码的字符,甚至是异常。
阅读您正在使用的方法的API文档,以了解它们的作用:
-
String.getBytes(String charsetName) -
String.getBytes() -
String(byte[] bytes, String charsetName) (构造函数)
问题中包含的两个例子都是胡扯。
Java
现在将
表示数组已被转换为字符串,
如果您收到一个byte []并想将其存储为字符串,
那么这样做很有意义:
如果您有一个String值,并且想将其作为字节写到某处[]
使用UTF-8编码,
那么这很有意义
1 2 | // assume input String blammy byte[] kapow = blammy.getBytes(StandardCharsets.UTF_8); |
请注意,在两种情况下,我都使用了该方法的(blah,Charset)版本。
做这个。
(blah," UTF-8 ")版本引发一个已检查的异常。
(空白,Charset)版本永远不会抛出异常,而StandardCharsets类会这样做(从StandardCharsets JavaDoc页面):
Constant definitions for the standard Charsets. These charsets are guaranteed to be available on every implementation of the Java platform.