web-dev-qa-db-ja.com

InputStreamをUTF-8として読み取る

インターネットを介してtext/plainファイルから1行ずつ読み取ろうとしています。私が今持っているコードは:

URL url = new URL("http://kuehldesign.net/test.txt");
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
LinkedList<String> lines = new LinkedList();
String readLine;

while ((readLine = in.readLine()) != null) {
    lines.add(readLine);
}

for (String line : lines) {
    out.println("> " + line);
}

ファイルtest.txtには¡Hélló!が含まれており、エンコードをテストするために使用しています。

OutputStreamout)を確認すると、> ¬°H√©ll√≥!と表示されます。 out.println("é");を問題なく実行できるため、これがOutputStreamの問題だとは思わない。

UTF-8としてInputStreamを読み取るためのアイデアはありますか?ありがとう!

90
Chris Kuehl

自分の問題を解決しました。この行:

BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));

する必要があります:

BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8"));

またはJava 7以降:

BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(), StandardCharsets.UTF_8));
172
Chris Kuehl
String file = "";

try {

    InputStream is = new FileInputStream(filename);
    String UTF8 = "utf8";
    int BUFFER_SIZE = 8192;

    BufferedReader br = new BufferedReader(new InputStreamReader(is,
            UTF8), BUFFER_SIZE);
    String str;
    while ((str = br.readLine()) != null) {
        file += str;
    }
} catch (Exception e) {

}

これを試して、.. :-)

14
Rohith

特殊文字が��としてマークするのを見つけるたびに、同じ問題に遭遇しました。これを解決するために、エンコードを使用してみました:ISO-8859-1

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("txtPath"),"ISO-8859-1"));

while ((line = br.readLine()) != null) {

}

これがこの投稿を見た人の助けになることを願っています。

5