2010-03-04 8 views
1

J'essaie de convertir un fichier de binaire en texte, en remplaçant simplement chaque caractère par le code hexadécimal. Par exemple, le caractère 'c' sera remplacé par '63'.VBA - Lire le fichier octet par octet sur le système avec les paramètres régionaux asiatiques

J'ai un code qui fonctionne bien dans les systèmes normaux, mais il se décompose dans le PC où je dois l'utiliser car il a par défaut les paramètres régionaux chinois.

J'utilise les instructions suivantes pour lire un octet -

ch$ = " " 
Get #f%, , ch$ 

Je pense qu'il ya un problème quand je suis en train de lire l'octet de fichier par octet, comme il saute certains octets parce qu'ils forment des caractères composites. Il lit probablement 2 octets qui forment un caractère asiatique en un octet. Il forme ainsi un fichier beaucoup plus petit que la taille attendue. Comment puis-je lire le fichier octet par octet?

code complet est collé ici: http://pastebin.com/kjpSnqzV

Répondre

2

Votre soupçon est correcte. Fichier VB lecture automatically converts chaînes en Unicode à partir de la page de code par défaut sur le PC. Sur une page de code asiatique, certains caractères sont représentés par plus d'un octet.

Je vous conseille d'utiliser une variable Byte plutôt qu'une chaîne - ce qui empêchera VB d'être utile.

Dim ch As Byte 
Get #f%, , ch 

Un autre problème possible avec le code original est que certaines séquences d'octets sont illégales sur les pages de code asiatiques (ils ne représentent pas des caractères valides). Votre code peut donc rencontrer des erreurs pour certains fichiers d'entrée, mais vous voulez probablement qu'il fonctionne avec n'importe quel fichier.

Questions connexes