String s
и byte[] 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 u
и String v
, и результат указан в комментариях.
Проблема XY Это на самом деле проблема XY,String s
возвращается в HttpEntity
вызова HttpClient
.Все, что я хочу, это правильно декодированный ответ.Вышесказанное гораздо проще воспроизвести, чем весь стек HTTP, поэтому давайте решим это вместо этого.