[英]String encoding (UTF-8) JAVA
任何人都可以在这里帮助我。 我想知道以下两种字符串格式的区别。 我正在尝试将字符串编码为UTF-8。 哪一种是正确的方法。
String string2 = new String(string1.getBytes("UTF-8"), "UTF-8"));
要么
String string3 = new String(string1.getBytes(),"UTF-8"));
另外,如果我同时使用上述两个代码,即
line 1 :string1 = new String(string1.getBytes("UTF-8"), "UTF-8"));
line 2 :string1 = new String(string1.getBytes(),"UTF-8"));
这两行中string1的值是否相同?
PS:完成所有这些操作的目的是在Web服务调用中发送日语文本。 所以我想用UTF-8编码发送它。
根据String#getBytes(String charsetName)
的javadoc:
使用命名的字符集将此String编码为字节序列,并将结果存储到新的字节数组中。
以及String(byte[] bytes, Charset charset)
的文档
通过使用指定的字符集解码指定的字节数组来构造新的String。
因此, getBytes()
与String(byte [])
操作相反。 getBytes()
将字符串编码为字节,而String(byte [])
将解码字节数组并将其转换为字符串。 两种方法都必须使用相同的字符集,以保留实际的字符串值。 即您的第二个示例是错误的:
// This is wrong because you are calling getBytes() with default charset
// But converting those bytes to string using UTF-8 encoding. This will
// mostly work because default encoding is usually UTF-8, but it can fail
// so it is wrong.
new String(string1.getBytes(),"UTF-8"));
Java中的String
和char
(两个字节的UTF-16)用于(Unicode)文本。
当从byte[]
转换为byte[]
需要这些字节的Charset
(编码)。
String.getBytes()
和new String(byte[])
都是使用默认操作系统编码的快捷方式。 对于跨平台使用来说,这几乎总是错误的。
所以用
byte[] b = s.getBytes("UTF-8");
s = new String(b, "UTF-8");
或者更好的是,不抛出UnsupportedCharsetException:
byte[] b = s.getBytes(StandardCharsets.UTF_8);
s = new String(b, StandardCharsets.UTF_8);
(但是,Android不知道StandardCharsets。)
桥接二进制数据(InputStream / OutputStream)和文本(Reader,Writer)的InputStreamReader, OutputStreamWriter
也是一样。
请不要混淆自己。 “字符串”通常用于引用存储文本的数据类型中的值。 在这种情况下,为java.lang.String
。
序列化文本是通过对字符串应用字符编码创建的字节序列。 在这种情况下, byte[]
。
Java中没有UTF-8编码的字符串。
如果您的Web服务客户端库采用字符串,则将其传递给该字符串。 如果允许您指定用于序列化的编码,则将其传递给StandardCharsets.UTF_8
或等效的编码。
如果不接收字符串, 则将其传递给string1.GetBytes(StandardCharsets.UTF_8)
并使用其提供的任何其他机制来告诉接收者字节是UTF-8编码的文本。 或者,获得其他客户端库。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.