Sziasztok!
Ismét a segítségeteket szeretném kérni, nem találtam eddig megoldást a problémámra. adott egy jTextPane, amibe beleteszek egy eredetileg utf-8 kódolású html tartalamt. nincs is semmi gond, amíg linuxon fut az app, de osx és winxp ékezetek helyett fura karakterek jelennek meg. Próbáltam már convertálni a tartalmat ISO-8859-1-ra de akkor mindenhol ****(nem faja).
Sajna gyér ismnereteim miatt azt sem tudom hol keressem a hibát, plz help!
Köszi előre is a segítséget.
- 1290 megtekintés
Hozzászólások
Szia!
Nem lehet, hogy a JTextpane-ben használt font nem tartalmazza a szükséges karaktereket?
- A hozzászóláshoz be kell jelentkezni
Lehet, én nem állítottam semilyen fontot.
jTextPane.setContentType("text/html); // NOI18N
jTextPane.setEditable(false);
jTextPane.setName("jTextPane"); // NOI18N
jTextPane.setText(html);
jScrollPane.setViewportView(jTextPane);
tudnál segíteni, hogy erről hogy tudnék megbizonyosodni?
- A hozzászóláshoz be kell jelentkezni
Ha explicit nem állítottad át, akkor nem ezzel lesz a gond.
- A hozzászóláshoz be kell jelentkezni
utf-16be-re konvertald...
----------------------
"ONE OF THESE DAYS I'M GOING TO CUT YOU INTO LITTLE PIECES!!!$E$%#$#%^*^"
- A hozzászóláshoz be kell jelentkezni
try {
Charset fromSet = Charset.forName("UTF-8");
CharsetEncoder fromSetEncoder = fromSet.newEncoder();
Charset toSet = Charset.forName("UTF-16");
CharsetDecoder toSetDecoder = toSet.newDecoder();
ByteBuffer frombuf = fromSetEncoder.encode(CharBuffer.wrap(content));
CharBuffer tobuf = toSetDecoder.decode(frombuf);
jTextPane.setText(tobuf.toString());
} catch (Exception ex) {
System.out.println(ex.getClass() + " : " + ex.getMessage());
}
így próbálkoztam, de class java.nio.charset.MalformedInputException : Input length = 1 ezt kaptam :( ezt kaptam. Próbáltam azt, hogy mikor kiszedem a stringet
URL url = new URL(queryString);
URLConnection connection = url.openConnection();
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
builder.append(line);
}
reader.close();
String result = new String(builder.toString().getBytes(), "UTF-16"); //volt, hogy getBytes("UTF-8")-at írtam
akkor erőltetem rá az utf-16-ot, de így már akkor fura karakterek jelentek meg, meg a tartalom egy része el is szállt.
Legalább a próbálkozás jó?
- A hozzászóláshoz be kell jelentkezni
Az InputStreamReader-nek meg kellene adnod a konstruktorban a charset-et.
- A hozzászóláshoz be kell jelentkezni
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
String line;
while ((line = reader.readLine()) != null) {
builder.append(line);
}
String response = new String(builder.toString().getBytes("UTF-8"), "UTF-16");
ez most a legújabb, levágja a szöveg elejét, meg ilyen \u4f43\2uee2 ilyenekkel szemeteli tele :(
- A hozzászóláshoz be kell jelentkezni
A kiírandó adatokat fájlból olvasod be? Ugyanazt a fájlt használod minden OS-en?
Amit írtál, annak szerintem jónak kellene lennie.
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
String line;
while ((line = reader.readLine()) != null) {
builder.append(line);
}
Windowson próbáld ki esetleg az "UTF-8" heleytt: "cp1252". Nem tudom pontosan, hogy írják, lehet kötőjel kell közé.
- A hozzászóláshoz be kell jelentkezni
A fájl mindig "ugyanaz", mivel egy weblapot olvasok be, és annak parsolom a tartalmát, megpróbálom napközben valamikor, nincs win itthon.
- A hozzászóláshoz be kell jelentkezni
Akkor ez így egyre érdekesebb. Akkor jó lenne tudni, hogy a beolvasás miatt jelentkezik ez a különbség vagy a megjelenítésnél. Beolvasás után konzolra is írd ki amit kaptál és utána módosítás nélkül ad át a jtextpanek is.
- A hozzászóláshoz be kell jelentkezni
A megoldás annyi volt, hogy az InputStream-nek meg kell adni, hogy utf-8, és utánna nem kell semmit tenni tovább, tehát nem kell utf-16-ba átkódolni. Köszönöm.
- A hozzászóláshoz be kell jelentkezni