簡體   English   中英

將UTF-8編碼的字符串轉換為人類可讀的字符串

[英]Convert UTF-8 encoded string to human readable string

如何將任何UTF8字符串轉換為可讀字符串。

像:â€(在UTF8中)是€

我嘗試使用Charset,但無法正常工作。

您正在使用byte[] b = "Üü?öäABC".getBytes("ISO-8859-15");將字符串編碼為ISO-8859-15 byte[] b = "Üü?öäABC".getBytes("ISO-8859-15"); 然后使用UTF-8 System.out.println(new String(b, "UTF-8"));對其進行解碼System.out.println(new String(b, "UTF-8")); 您必須使用ISO-8859-15對其進行解碼。

這不是“ UTF-8”,而是完全損壞且不可修復的數據。 字符串沒有編碼。 在這種情況下,說“ UTF-8”字符串是沒有意義的。 字符串是一串抽象字符-它沒有任何編碼,只是作為內部實現的細節,這不是我們關心的問題,與您的問題無關。

Java中的字符串已經是unicode表示形式。 當您在其上調用getBytes方法之一時,您將獲得一種特定編碼方式的編碼表示形式(以字節為單位,因此為二進制值)-本例中為ISO-8859-15。 如果要將此字節數組轉換回unicode字符串,則可以像接受字符串數組那樣,使用其中一個接受字節數組的字符串構造函數來執行此操作,但是必須使用與最初生成字節數組時使用的完全相同的編碼來做到這一點。 只有這樣,您才能將其轉換回一個unicode字符串(該字符串沒有編碼,並且不需要一個)。

提防字符串構造函數和getBytes方法的無編碼方法,因為它們使用代碼在其上運行的平台的默認編碼,這可能不是您想要實現的。

您正在嘗試對以“ ISO-8859-15”和“ UTF-8”格式編碼的byteArray進行解碼

        b = "Üü?öäABC".getBytes("ISO-8859-15");
        u = "Üü?öäABC".getBytes("UTF-8");

    System.out.println(new String(b, "ISO-8859-15")); // will be ok
    System.out.println(new String(b, "UTF-8")); // will look garbled
    System.out.println(new String(u,"UTF-8")); // will be ok

我認為這里的問題是,您假設使用構造函數中指定的內容對java String進行編碼。 不是。 在UTF-16中。

因此, "Üü?öäABC".getBytes("ISO-8859-15")實際上是將UTF-16字符串轉換為ISO-8859-15,然后獲取該字節的表示形式。

如果要在Eclipse控制台中獲得人類可讀的格式,只需保持其原樣(在UTF-16中),然后調用System.out.println("Üü?öäABC") ,因為您的Eclipse控制台將解碼字符串並將其顯示為UTF-16。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM