簡體   English   中英

windows-1252到UTF-8

[英]windows-1252 to UTF-8

下面是我試圖使用的代碼,它給我的輸出是:

RetValue: á, é, í, ó, ú, ü, ñ, ¿ Value: á, é, í, ó, ú, ü, ñ, ¿ ConvertValue: ?, ?, ?, ?, ?, ?, ?, ?

這不是所需的輸出。 我認為這里的每個角色的輸出應該是這種%C3%。

public static void main(String[] args) {
    String value = "á, é, í, ó, ú, ü, ñ, ¿";
    String retValue = "";
    String convertValue = "";
    try {
        retValue = new String(value.getBytes(),
        Charset.forName("Windows-1252"));
        convertValue = new String(retValue.getBytes("Windows-1252"),
        Charset.forName("UTF-8"));
    } catch (Exception e) {
        e.printStackTrace();
    }
    System.out.println("RetValue: " + retValue + " Value: " + value
         + " ConvertValue: " + convertValue);
}

我知道您正在嘗試將文本從默認編碼編碼為Windows-1252,然后編碼為UTF-8。

根據String類的javadoc

String(byte[] bytes, Charset charset)

通過使用指定的字符集解碼指定的字節數組構造一個新的String。

因此,您所做的是將默認編碼文本解碼為Windows-1252,然后將新獲得的文本進一步解碼為UTF-8。 這就是它導致異常的原因。

如果您的目的是從Windows-1252編碼為UTF-8,我建議您在java.nio包中使用CharsetEncoder的以下方法:

public static void main(String[] args) {
    String value = "á, é, í, ó, ú, ü, ñ, ¿";
    String retValue = "";
    String convertValue2 = "";
    ByteBuffer convertedBytes = null;
    try {
        CharsetEncoder encoder2 = Charset.forName("Windows-1252").newEncoder();
        CharsetEncoder encoder3 = Charset.forName("UTF-8").newEncoder();             
        System.out.println("value = " + value);

        assert encoder2.canEncode(value);
        assert encoder3.canEncode(value);

        ByteBuffer conv1Bytes = encoder2.encode(CharBuffer.wrap(value.toCharArray()));

        retValue = new String(conv1Bytes.array(), Charset.forName("Windows-1252"));

        System.out.println("retValue = " + retValue);

        convertedBytes = encoder3.encode(CharBuffer.wrap(retValue.toCharArray()));
        convertValue2 = new String(convertedBytes.array(), Charset.forName("UTF-8"));
        System.out.println("convertedValue =" + convertValue2);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

我獲得了以下輸出:

value =á,é,í,ó,ú,ü,ñ,¿

retValue =á,é,í,ó,ú,ü,ñ,¿

convertedValue =á,é,í,ó,ú,ü,ñ,¿

暫無
暫無

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

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