java - 统一码问题 : How to convert ’ to ’ in the response from HttpClient?

标签 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 sHttpClient 调用的 HttpEntity 中返回。我想要的只是正确解码的响应。上面的内容比整个 HTTP 堆栈更容易重现,所以让我们来解决这个问题。

最佳答案

这似乎有效,但我不明白为什么,我担心它可能与平台相关:

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

关于java - 统一码问题 : How to convert ’ to ’ in the response from HttpClient?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52732990/

相关文章:

java - 如果某些值不存在则插入到表中

Java:为什么静态字段彼此都是 "independent"?

带有 utf-8 的 php substr() 函数在末尾留下 � 标记

php - 中文字符在数据库中以空白结尾

java - 没有 WindowManager.LayoutParams.TYPE_PHONE 的粘性覆盖

Java 定义或初始化类的属性

c++ - mbstowcs() 因特殊字符而失败

python - Unicode编码错误: 'ascii' codec can't encode character u'\u2013'

delphi - Delphi错误E2064左侧无法分配给

Java:搜索错误编码的字符串而不修改它