[英]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.