簡體   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