Java 如何将windows-1250/Cp1250中编码的字符串转换为utf-8?
正如标题所说。。。 我读了HTC的内容,然后回应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");
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();