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 ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Jc Sirot
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
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.
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
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 "