繁体   English   中英

字符串编码(UTF-8)JAVA

[英]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中的Stringchar (两个字节的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM