Java windows-1252至UTF-8

Java windows-1252至UTF-8,java,character-encoding,Java,Character Encoding,下面是我尝试使用的代码,它给我的输出是: RetValue: á, é, í, ó, ú, ü, ñ, ¿ Value: á, é, í, ó, ú, ü, ñ, ¿ ConvertValue: ?, ?, ?, ?, ?, ?, ?, ? 这不是期望的输出。我认为这里的每个字符的输出应该是%C3% public static void main(String[] args) { String value = "á, é, í, ó, ú, ü, ñ, ¿"; String r

下面是我尝试使用的代码,它给我的输出是:

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

根据
字符串
类的javadoc

字符串(字节[]字节,字符集字符集)

通过使用 指定的字符集

因此,您所做的是将默认编码文本解码为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=á,é,í,ó,ú,ü,ñ