Unicode问题:如何在HttpClient的响应中将’转换为?

时间:2018-10-10 05:10:16

标签: java unicode utf-8 apache-httpclient-4.x utf-16

下面的代码中的String sbyte[] b包含大致相同的事物的不同表示形式。

import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;

import org.testng.annotations.Test;

public class Utf8Test {

    @Test
    public void test() throws UnsupportedEncodingException {
        String s = "’";
        byte[] b = new byte[] { (byte) 0xE2, (byte) 0x80, (byte) 0x99 };

        System.out.println(s); // prints ’

        String t = new String(b, Charset.forName("UTF-8"));
        System.out.println(t); // prints ’

        String u = new String(s.getBytes("ISO-8859-1"), Charset.forName("UTF-8"));
        System.out.println(u); // prints ???

        byte[] b2 = new byte[s.length()];
        for(int i=0; i < s.length(); ++i) {
            b2[i] = (byte) (s.charAt(i) & 0xFF);
        }
        String v = new String(b2, Charset.forName("UTF-8"));
        System.out.println(v); // prints ?"

        Assert.assertEquals(s,v); // FAIL
    }

}

如何将String s转换为与String t相同的值?

我已经尝试了生成String uString v的代码,并且结果显示在注释中。

XY问题 这实际上是一个XY问题。 String sHttpEntity调用的HttpClient中返回。我想要的只是正确解码的响应。上面的内容比整个HTTP堆栈要容易得多,因此让我们解决它。

1 个答案:

答案 0 :(得分:1)

这似乎可行,但是我不明白为什么,我担心它可能取决于平台:

byte[] d = s.getBytes("cp1252"); 
String w = new String(d, Charset.forName("UTF-8"));
System.out.println(w); // prints ’