Encoding d'un stream provenant d'un socket

Le
niin
Bonjour,

je fais un programme qui communique avec des serveurs IRC. Je reçois
les données via un socket. Au moment de les afficher, les caractères
accentués sont affichés sous forme de carré. Cependant, les caractères
propre à mon programme (ne venant pas du net) sont affichés
correctement.

Y a-t-il un moyen de connaître l'encodage d'un stream ?

Voici ce que j'ai fait :

socket = new Socket(server, port);

iStream = new BufferedReader(new
InputStreamReader(socket.getInputStream()));

String line = iStream.readLine();
String newLine = new String(line.getBytes("UTF-8"),"ISO-8859-1");

Au moment de l'affichage, line et NewLine sont tjrs identiques, avec
les carrés !

J'ai essayé bcp de combinaisons, comme UTF-8, UTF-16, US-ASCII,
ISO-8859-1, mais rien n'y fait !


Avez-vous une idée pour me sortir de ce problème ?

Cordialement

Truffer Daniel
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jc Sirot
Le #635579
NIIN wrote:
Bonjour,

je fais un programme qui communique avec des serveurs IRC. Je reçois
les données via un socket. Au moment de les afficher, les caractères
accentués sont affichés sous forme de carré. Cependant, les caractères
propre à mon programme (ne venant pas du net) sont affichés
correctement.

Y a-t-il un moyen de connaître l'encodage d'un stream ?


Telle qu'elle est posée la question n'a pas de sens. Un stream n'est
qu'une suite d'octet, la question de l'encodage ne se pose que lorsque
cette suite d'octet représente du texte.

Concernant l'IRC, je crois me souvenir qu'il n'existe pas d'encodage
défini. Dans un monde parfait UTF-8 serait utilisé partout mais en
réalité ISO-8859-1 reste très populaire, tant qu'on évite le chinois ou
l'arabe bien sûr.

socket = new Socket(server, port);

iStream = new BufferedReader(new
InputStreamReader(socket.getInputStream()));

String line = iStream.readLine();
String newLine = new String(line.getBytes("UTF-8"),"ISO-8859-1");


Cette dernière ligne n'a pas de sens. En interne, les chaines de
caractères sont toutes encodées de la même façon : on ne convertit pas
un objet String.

Par contre InputStreamReader possède un constructeur prenant un encodage
en paramètre donc

socket = new Socket(server, port);
iStream = new BufferedReader(new
InputStreamReader(socket.getInputStream(), "ISO-8859-1"));

devrait fournir un Reader qui fonctionne correctement.

--

Cordialement
-- JC Sirot

Olivier
Le #647989
Bonjour,

Est-ce que l'encodage à un rapport avec les caractères de fin de chaîne ? :
pour une application réseau je voudrais que la fin de chaîne soit "".

Suis je obligé de passer par : System.setProperty("line.separator","");
???

Ou l'histoire des ISO-8859-1... peut me venir en aide ?
Publicité
Poster une réponse
Anonyme