有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Unicode问题:如何转换™ 在HttpClient的响应中是否为?

下面代码中的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问题。在HttpClient调用的HttpEntity中返回String s。我只想要正确解码的回应。以上内容比整个HTTP堆栈更容易复制,所以让我们来解决这个问题


共 (1) 个答案

  1. # 1 楼答案

    这似乎有效,但我不明白为什么,我担心它可能依赖于平台:

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