Java 如何将windows-1250/Cp1250中编码的字符串转换为utf-8?

Java 如何将windows-1250/Cp1250中编码的字符串转换为utf-8?,java,string,Java,String,正如标题所说。。。 我读了HTC的内容,然后回应 InputStream is = response.getEntity().getContent(); String cw = IOUtils.toString(is); byte[] b = cw.getBytes("Cp1250"); String x = StringUtils.newStringUtf8(b); String content = new String(b, "UTF-8");

正如标题所说。。。 我读了HTC的内容,然后回应



    InputStream is = response.getEntity().getContent();
    String cw = IOUtils.toString(is);
    byte[] b = cw.getBytes("Cp1250");
    String x = StringUtils.newStringUtf8(b);
    String content = new String(b, "UTF-8");

    System.out.println(content);


我尝试过很多变化。我对用作字符串的正确编码常量有点困惑。windows-1250或Cp1250。UTF-8或UTF-8或utf8

您正在向后转换。您需要以
字节
数组的形式获取输入数据,然后使用
字符串(byteArray,“Cp1250”)
创建字符串对象。然后,如果您想要UTF-8,请使用
String.getBytes(“UTF-8”)
您似乎认为
String
对象具有编码。那是不对的。编码用作从二进制数据(字节[]或输入流)到文本数据(字符串[/code>或字符[]等)的转换的一部分

目前尚不清楚IOUtils.toString正在做什么,但它几乎肯定会丢失数据,或者至少处理不当。如果数据最初在Windows-1250中,则应使用
InputStreamReader
包装
InputStream
,在
InputStreamReader
构造函数调用中指定字符集


还不清楚UTF-8是从哪里来的-您可能希望在以后用UTF-8写出数据,但结果将是
字节[]
,而不是字符串。

假设Apache Commons IO,请使用:

所有字符串在Java中都隐式使用UTF-16。其他编码通常使用字节数组表示。

编码具有规范(唯一)名称和其他不同的名称,不区分大小写。例如,“UTF-8”是标准名称,但一些java版本的名称是“UTF8”;它写得更符合一般用法。“Windows-1250”也是如此,您也可以在HTML页面中看到它。“Cp1250”(代码页)是java内部名称

在java中,字节[]是二进制数据,字符串(内部为Unicode)是文本。 两者之间的转换需要编码,但通常是可选的,采用操作系统默认值

字节、输入流、输出流字符串、字符、读取器、写入器

String cw = IOUtils.toString(is, "UTF-8"); // InputStream is binary gives byte[], hence give encoding
byte[] b = cw.getBytes("Cp1250");
String x = new String(b, "Cp1250");
String content = s;

System.out.println(content);
为了允许这个通用(qua编码)字符串,字符串在内部使用字符UTF-16。
字符串常量以UTF-8(更紧凑)的形式存储在.class文件中。

我认为最好使用扫描仪读取不同的字符集

    FileInputStream is = new FileInputStream(fileOrPath);
    Scanner scanner = new Scanner(is, "cp1250");
    String out = scanner.next();
方法
next()
返回应用程序字符集中的
String


在“捷克语”上测试,从“cp1250”到“UTF-8”。

从技术上讲,
java.lang.String
有一个编码:UTF-16。
    FileInputStream is = new FileInputStream(fileOrPath);
    Scanner scanner = new Scanner(is, "cp1250");
    String out = scanner.next();