0

さまざまな数の外国語を一覧表示する単純なWebサービスがあります。

それらのいくつかは、ネイティブの文字セットでリストされています(たとえば、中国語など)。

これをWebページから読み取り、動的にに追加する必要がありJComboBoxます。

実際、私はこれらを次のように読んでいます。

public static Vector getSiteLanguages() {
    System.out.println("Reading Home from " + Constants.HOME);
    URL url;
    URLConnection connection;
    BufferedReader br;
    String inputLine;

    String regEx = "<option.*value=.([A-Z]*).>(.*)</option>";
    Pattern pattern = Pattern.compile(regEx);       
    Matcher m;
    Vector siteLangs = new Vector(); 

    try {
        url = new URL( Constants.HOME);
        connection = url.openConnection();
        br = new BufferedReader(new InputStreamReader(connection.getInputStream()));

        while ((inputLine = br.readLine()) != null) {
            m = pattern.matcher(inputLine);
            while ( m.find()) {
                System.out.println(m.group(1) + "->" + m.group(2) );
                siteLangs.add(m.group(2));
            }
        }
        br.close();
    } catch (IOException e) {
        return siteLangs;
    } 

    return siteLangs;       
}

それからJFrameクラスで私はこれをやっています:

Vector siteLangs = Language.getSiteLanguages();
JComboBox siteLangCombo = new JComboBox(siteLangs);

しかし、このようにして、ラテン語以外のすべての言語が失われます...

この状況でラテン語以外の情報を保持するにはどうすればよいですか?

4

1 に答える 1

0

デフォルトでは、プラットフォームのInputStreamReaderデフォルトの文字エンコードを使用して、バイトを文字に変換します。Webサイトは、HTTP応答で文字をバイトに変換するために、異なる文字エンコードを使用しているようです。Content-TypeHTTP応答ヘッダーがどれであるかを確認する必要があります。

String contentType = connection.getHeaderField("Content-Type");

UTF-8は、世界を支配しようとするWebサイトで最近最も一般的に使用されている文字エンコードであると仮定すると、InputStreamReaderコードの構築中にこれを指定する方法は次のとおりです。

br = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));

参照:


具体的な問題とは関係なくVector、これは1998年からインターフェースに置き換えられたレガシークラスListです。Javaの学習中に最新のリソースを読んでいますか?さらに、HTMLを解析する必要があるだけの場合は、正規表現を最初に選択するべきではありません。これはJavaであり、PHPではありません。通常のHTMLパーサーを使用します。これにはJsoupが役立つかもしれません。これまでに作成したコード全体を2行または3行に戻すことができます。

于 2012-05-19T19:28:41.660 に答える