3

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 として実行すると、システム エンコーディングが Cp1252 として表示され、IDE 内で実行すると UTF-8 として表示されます。

4

1 に答える 1

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

これはコード変換エラーです。文字列を「EUC-KR」としてエンコードし、システム エンコードを使用してデコードします (ジャンクになります)。これを回避するには、エンコーディングをInputStreamReaderに渡す必要があります。

ただし、そのエンコードとデコードをすべて回避し、StringReaderのみを使用することをお勧めします。

于 2011-01-16T11:20:55.600 に答える