Jericho HTML パーサーによって返され、ロシア語のテキストを含む文字列があります。それぞれの HTML ファイルのヘッダーによるsource.getEncoding()
と、エンコーディングは 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 (2015 年 7 月 30 日 12:45 MSK):の呼び出しでエンコーディングを変更しconvertString
てWindows-1251
も、何も変わりません。以下のスクリーンショットを参照してください。
更新 2:別の試み:
更新 3 (2015 年 7 月 30 日 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;
}