我有一个字符串,它由 Jericho HTML 解析器返回并包含一些俄语文本。根据source.getEncoding()
相应 HTML 文件的标头,编码为 Windows-1251。
如何将此字符串转换为可读的内容?
我试过这个:
import java.io.UnsupportedEncodingException;
public class Program {
public void run() throws UnsupportedEncodingException {
final String windows1251String = getWindows1251String();
System.out.println("String (Windows-1251): " + windows1251String);
final String readableString = convertString(windows1251String);
System.out.println("String (converted): " + readableString);
}
private String convertString(String windows1251String) throws UnsupportedEncodingException {
return new String(windows1251String.getBytes(), "UTF-8");
}
private String getWindows1251String() {
final byte[] bytes = new byte[] {32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, -17, -65, -67, -17, -65, -67, -17, -65, -67, -17, -65, -67, -17, -65, -67, -17, -65, -67, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32};
return new String(bytes);
}
public static void main(final String[] args) throws UnsupportedEncodingException {
final Program program = new Program();
program.run();
}
}
该变量bytes
包含我的调试器中显示的数据,它是net.htmlparser.jericho.Element.getContent().toString().getBytes()
. 我只是在此处复制并粘贴该数组。
这不起作用 -readableString
包含垃圾。
如何修复它,即确保正确解码 Windows-1251 字符串?
更新 1(30.07.2015 12:45 MSK):将调用中的编码更改convertString
为 时Windows-1251
,没有任何变化。请参阅下面的屏幕截图。
更新 2:另一次尝试:
更新 3(30.07.2015 14:38):我需要解码的文本对应如下所示下拉列表中的文本。
更新 4(30.07.2015 14:41):编码检测器(代码见下文)说编码不是Windows-1251
,而是UTF-8
。
public static String guessEncoding(byte[] bytes) {
String DEFAULT_ENCODING = "UTF-8";
org.mozilla.universalchardet.UniversalDetector detector =
new org.mozilla.universalchardet.UniversalDetector(null);
detector.handleData(bytes, 0, bytes.length);
detector.dataEnd();
String encoding = detector.getDetectedCharset();
System.out.println("Detected encoding: " + encoding);
detector.reset();
if (encoding == null) {
encoding = DEFAULT_ENCODING;
}
return encoding;
}