merci pour ta réponse tchize.
Il s'avère que les jtextarea ne supportent pas l'unicode mais le ISO-8859-1 !.
par exemple (et à condition que le fichier .java soit encodé en unicode et qu'on ajoute à javac "-encoding UTF8");
1 2 3 4 5 6 7 8
| String s = "à côté";
byte[] b = s.getBytes();
String s2 = null;
try{
s2 = new String(b,"UTF-8");
}catch(UnsupportedEncodingException e){e.printStackTrace();}
_text.append(s2); |
affiche : � c�t�
par contre, comme je l'ai dit avec l'ISO-8859-1, tout baigne :
je poste donc ma méthode pour chopper une page web encodée en ISO-8859-1, et la traduire dans l'encodage du système (qui est utilisé par défaut par java).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| private String get(URL _url) {
String _source = null;
try {
//prepares the connection and opens it
HttpURLConnection _httpCon = (HttpURLConnection) _url.openConnection();
_httpCon.addRequestProperty("User-Agent", "Mozilla/5.0"); //masquarade
_httpCon.addRequestProperty("Accept-Language", "fr");
InputStream _in = _httpCon.getInputStream();
//used to store the page before decoding it
ByteArrayOutputStream _out = new ByteArrayOutputStream(4096);
byte [] _buf = new byte[4096];
int i;
while((i = _in.read(_buf)) > -1)
_out.write(_buf, 0, i);
_httpCon.disconnect();
_in.close();
Charset _charset = Charset.forName("ISO-8859-1");
CharsetDecoder _decoder = _charset.newDecoder()
.onMalformedInput(CodingErrorAction.REPLACE)
.onUnmappableCharacter(CodingErrorAction.REPLACE);
ByteBuffer _bb = ByteBuffer.wrap(_out.toByteArray());
_out.close();//does nothing, but arggggl
_source = _decoder.decode(_bb).toString();
}
catch (MalformedURLException _mue) {
_mue.printStackTrace();}
catch (IOException _ioe) {
_ioe.printStackTrace();}
//catch (UnknownHostException _uhe) {
// _uhe.printStackTrace();}
return _source;
} |
enfin, lorsque l'on déclare le Charset, on peut essayer :
Charset _charset = Charset.forName(_httpCon.getHeaderField("Content-encoding"));
mais tous les serveurs ne fournissent pas l'encodage de ce qu'ils servent.
De plus il n'existe pas de méthode fiable pour définir l'encodage des pages, le plus souvent cela est déterminé statistiquement.
.
Pour poursuive, comment peut on faire pour qu'une JTextArea accepte les caractères unicodes ? Suffit-il d'y définir une police unicode ?
Partager