在Windows上使用Java读取EUC编码的HTML

时间:2011-01-16 05:28:43

标签: java character-encoding bufferedreader

我正在尝试从URL读取一个在EUC-KR中编码的HTML文件。当我在IDE中编译代码时,我获得了所需的输出,但是当我构建一个jar并尝试运行jar时,我读取的数据显示为问号(“????”而不是韩文字符)。我假设它是由于编码丢失。

该网站的元文说明如下:

 <meta http-equiv="Content-Type" content="text/html; charset=euc-kr">

这是我的代码:

  String line;
  URL u = new URL("link to the site");
  InputStream in = u.openConnection().getInputStream();
  BufferedReader r = new BufferedReader(new InputStreamReader(in, "EUC-KR"));
  while ((line = r.readLine()) != null) {
    /*send the string to a text area*/--> This works fine now
    /*take the string and pass it thru ByteArrayInputStream*/ --> this is where I believe the encoding is lost.

    InputStream xin = new ByteArrayInputStream(thestring.getBytes("EUC-KR"));
    Reader reader = new InputStreamReader(xin);
    EditorKit kit = new HTMLEditorKit();
    HTMLDocument doc = (HTMLDocument) kit.createDefaultDocument();
    kit.read(reader, doc, 0);
    HTMLDocument.Iterator it = doc.getIterator(HTML.Tag.STRONG);

    while (it.isValid()) {
      chaps.add(doc.getText(it.getStartOffset(), it.getEndOffset() - it.getStartOffset()).trim());
      //chaps is a arraylist<string>
      it.next();
    }

如果有人可以帮助我弄清楚如何在不依赖于系统默认编码的任何平台上运行应用程序而不丢失编码的情况下找出如何抓取字符,我将不胜感激。

感谢

PS:以jar运行的程序在IDE内部运行时显示系统编码为Cp1252和UTF-8。

1 个答案:

答案 0 :(得分:3)

InputStream xin = new ByteArrayInputStream(thestring.getBytes("EUC-KR"));
Reader reader = new InputStreamReader(xin);

这是转码错误。您将字符串编码为“EUC-KR”并使用系统编码对其进行解码(导致垃圾)。为避免这种情况,您必须将编码传递给InputStreamReader

但是,最好避免所有编码和解码,只使用StringReader