2011-03-28 1 views
0

J'essaie de lire un fichier de la carte SD et on m'a dit qu'il était au format Unicode. Cependant, lorsque je tente de lire le fichier que je reçois le texte suivant:Problème d'encodage des fichiers lus sous Android

Encoded file

C'est le code que je utilise pour lire le fichier:

InputStreamReader fw = new InputStreamReader(new FileInputStream(root.getAbsolutePath()+"/Drive/sdk/cmd.62.out"), "UTF-8"); 
char[] buf = new char[255];  
fw.read(buf); 
String readString = new String(buf); 
Log.d("courierread",readString);  
fw.close(); 

Si j'écris que la production à un fichier c'est ce que je reçois quand je l'ouvre dans un éditeur hexadécimal: Hex info

Des réflexions sur ce que je dois faire pour lire le fichier correctement?

Répondre

1

Le fichier comporte-t-il un byte-order mark? Dans ce regard de cas à Reading UTF-8 - BOM marker

EDIT (de commentaire): Cela ressemble à peu endian UTF-16 pour moi. Essayez le jeu de caractères "UTF-16LE".

+0

Je ne sais pas, mais j'ai essayé d'appliquer le code de suppression de la nomenclature et cela semblait empirer les choses! Je suppose que la solution la plus simple est de supprimer tous ces caractères A étranges - malheureusement, je ne connais pas le caractère Unicode pour le faire. – RichW

+0

Supprimer ces caractères ne résoudrait pas le problème. Êtes-vous sûr que c'est un fichier UTF-8? Pouvez-vous regarder le fichier dans un éditeur hexadécimal et poster une capture d'écran ou les codes hexadécimaux des premiers octets? – RoToRa

+0

Tout ce que je sais, c'est que c'est unicode. J'ai essayé UTF-16 et c'était complètement illisible, c'était juste composé de beaucoup de caractères douteux. Comme demandé, j'ai sorti les codes hexadécimaux pour chaque personnage (voir le message original). Il semble qu'il y ait un 0 entre chaque caractère. – RichW

1

Le fichier que vous affichez dans l'éditeur hexadécimal est et non codé en UTF-8, il ressemble plus à UTF-16. Cela signifie que vous devez spécifier UTF-16 comme encodage dans votre code (probablement la variante UTF-16LE).

S'il s'agissait d'un codage UTF-8, alors il représenterait tous les caractères représentables en ASCII en utilisant un seul octet.

+0

Astuce intéressante, merci pour cela. Je vais essayer de créer différents fichiers avec différents types d'encodage .. Je suppose que c'est la façon la plus simple d'apprendre la différence – RichW

Questions connexes