Próbuję czytać z text/plain
pliku przez Internet, wiersz po wierszu. Kod, który mam teraz, to:
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);
}
Plik test.txt
zawiera ¡Hélló!
, którego używam do testowania kodowania.
Kiedy przeglądam OutputStream
( out
), widzę to jako > ¬°H√©ll√≥!
. Nie wierzę, że jest to problem z tym, OutputStream
ponieważ mogę się obejść out.println("é");
bez problemów.
Jakieś pomysły na odczytanie InputStream
jako UTF-8? Dzięki!
java
utf-8
inputstream
Chris Kuehl
źródło
źródło
text/plain
niestety dostępu do serwera, który udostępnia plik i nie używa on kodowania UTF-8. Nie znałem żadnych dobrych bibliotek sieciowych; jakieś sugestie?Odpowiedzi:
Rozwiązałem własny problem. Ta linia:
musi być:
lub od wersji Java 7:
źródło
CharsetDecoder dec
argumentu. To ten sam błąd projektowy Javy, któryOutputStreamWriter
mają konstruktorzy: tylko jeden z czterech w rzeczywistości protekcjonalnie mówi ci, kiedy coś pójdzie nie tak.CharsetDecoder dec
Tam również musisz użyć fantazyjnego argumentu. Jedyną bezpieczną i rozsądną rzeczą do zrobienia jest uznanie wszystkich innych konstruktorów za przestarzałe, ponieważ nie można im ufać, że zachowują się.StandardCharsets.UTF_8
Spróbuj tego,.. :-)
źródło
Napotykałem ten sam problem za każdym razem, gdy znajdował specjalny znak oznaczający go jako . aby rozwiązać ten problem, próbowałem użyć kodowania: ISO-8859-1
Mam nadzieję, że pomoże to każdemu, kto zobaczy ten post.
źródło