[JAVA] Distinguer un fichier ASCII d'un fichier unicode

Distinguer un fichier ASCII d'un fichier unicode [JAVA] - Java - Programmation

Marsh Posté le 26-11-2002 à 22:26:38    

Existe-t-il un moyen simple de faire cela ?


---------------
Défiance (ou méfiance) est mère de sûreté  
Reply

Marsh Posté le 26-11-2002 à 22:26:38   

Reply

Marsh Posté le 26-11-2002 à 22:27:16    

ben tu consideres tout comme de l'unicode et basta


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 26-11-2002 à 22:30:07    

--greg-- a écrit a écrit :

ben tu consideres tout comme de l'unicode et basta




euh... et tu lis deux octets par deux, et tu loupes la moitié  :o

Reply

Marsh Posté le 26-11-2002 à 22:45:31    

ben non
en unicode les caracteres ascii sont pas encodés
les autres sont précédés de \u  
je raconte n'importe quoi? :/


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 26-11-2002 à 22:51:28    

--greg-- a écrit a écrit :

ben non
en unicode les caracteres ascii sont pas encodés
les autres sont précédés de \u  
je raconte n'importe quoi? :/




je pense, vu que pour une dll a la con windows a laquelle je devais m'interfacer et qui me permettait de recupérer les mots de passes, je lisais qu'un octet sur 2 (car cette merde d'api te file de l'unicode...)

Reply

Marsh Posté le 26-11-2002 à 22:57:17    

ben en fait ça depend ss doute de quel type d'encodage on parle, mais (hop hop je reviens sur mes paroles discretement) il me semble que c'est genre: tu lis 1 octet: si < telle valeur ==> c de l'ascii, sinon tu prend le(s) suivant(s) en compte pour récupérer le caractere unicode
bon en meme temps si dans ton fichier ascii t'as de l'ascii étendu tu es pê de la baise. j'en sais trop rien en fait.
 
mais chuis persuadé qu'il y a moyen de lire les 2 sans devoir savoir à priori si c ascii pur ou unicode


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 26-11-2002 à 23:00:24    

Un premier test a faire, c'est déja voir si file est capable de faire a différence...

Reply

Marsh Posté le 26-11-2002 à 23:00:58    

avec un Reader derrière, je pense que oui ;)


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 26-11-2002 à 23:02:38    

--greg-- a écrit a écrit :

avec un Reader derrière, je pense que oui ;)




 :non: je parlais de la commande unix

Reply

Marsh Posté le 26-11-2002 à 23:03:18    

--greg-- a écrit a écrit :

avec un Reader derrière, je pense que oui ;)




j'avais même pas vu qu'on est dans un topic java :lol:
dans ce cas oui, tu prends un FileReader et il se démerde...

Reply

Marsh Posté le 26-11-2002 à 23:03:18   

Reply

Marsh Posté le 26-11-2002 à 23:06:03    

lorill a écrit a écrit :

 
j'avais même pas vu qu'on est dans un topic java :lol:
dans ce cas oui, tu prends un FileReader et il se démerde...



:D


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 27-11-2002 à 11:12:23    

Par définition, du texte brut est... brut !Donc, aucune information annexe ne l'accompagne.
 
Maintenant, si tu cherches une astuce, tu peux essayer de compter le nombre d'octets à zéro, un ou deux dans, disons, les 4000 premiers caractères. Si leur proportion est proche de 50%, il y a de fortes chances que ton fichier soit en Unicode et qu'il ne contienne que des caractères européens.
 
Mais pour faire la différence entre un fichier Unicode rempli de caractères chinois et un fichier ASCII étendu... En tout cas, moi, je ne connais pas de méthode.

Reply

Marsh Posté le 27-11-2002 à 11:32:15    

j'en connais bien une: le REGEDIT de Windows 2000 exporte sa registry sous forme de fichier unicode.  Si tu édites ce fichier en hexadécimal, tu vas voir que la chose commence par deux bytes précis: 255, 254 (soit en hexa FF FE).  Si ton fichier commence par ces deux bytes, c'est un fichier texte unicode, sinon, c'est de l'ascii.
 
J'ai eu le problème également en VB où j'essayais de charger une ressource texte mais ça marchait pas bien parce que VB travaille uniquement en unicode.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 27-11-2002 à 11:33:37    

Pareil que Biface.
Je me suis frotté récemment à des fichiers en Japonais à encoder façon URLEncoder. Bin soit t'as une ligne au tout début de ton fichier qui te précise le charset, soit t'en sais rien. Donc bonne chance.
Par contre, je ne crois pas que FileReader marche. Comme le dit la doc, cette classe utilise le charset par défaut donc niveau portabilité du prog c'est moyen. Par contre, DataInputStream fait ça très bien, cf la javadoc de cette classe.
 
En attendant, bon courage passke c'est bien galère.


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 27-11-2002 à 11:37:42    

drasche a écrit a écrit :

j'en connais bien une: le REGEDIT de Windows 2000 exporte sa registry sous forme de fichier unicode.  Si tu édites ce fichier en hexadécimal, tu vas voir que la chose commence par deux bytes précis: 255, 254 (soit en hexa FF FE).  Si ton fichier commence par ces deux bytes, c'est un fichier texte unicode, sinon, c'est de l'ascii.
 
J'ai eu le problème également en VB où j'essayais de charger une ressource texte mais ça marchait pas bien parce que VB travaille uniquement en unicode.




 
Moui euh bin perso j'peux te garantir que quand un Japonais sauvegarde un fichier texte de base sous Windows ou sous Unix, y a pas ces deux fameux caractères. Et pis toujours pour la portabilité, ça reste plus que moyen :o


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 27-11-2002 à 11:39:43    

Pour les readers il me semble que tu peux specifier un encodage hein...


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 27-11-2002 à 11:42:49    

--greg-- a écrit a écrit :

Pour les readers il me semble que tu peux specifier un encodage hein...




 
Bin y a bien un getEncoding() mais pas de set, ou alors j'ai raté un truc. Comme dit la doc :

Citation :

The constructors of this class assume that the default character encoding and the default byte-buffer size are appropriate. To specify these values yourself, construct an InputStreamReader on a FileInputStream.


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 27-11-2002 à 12:04:42    

Ha ben voila, ce sont bien des Reader ça :D


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed