2009-12-13 6 views
2

Une application sur laquelle je travaille stocke des données dans un fichier INI. L'application crée le fichier INI qui à son tour sera lu par une autre application que nous avons également créée. Le fichier INI peut également être modifié manuellement. Il est probable que tôt ou tard, le fichier INI contiendra des langues différentes. Nous avons donc veillé à ce que toutes les données utilisées dans ce fichier soient au format Unicode. Après avoir créé le fichier INI initialement Nous avons examiné le fichier dans le bloc-notes et remarqué que l'espacement des lettres était vissé. Après un peu de recherche, nous avons découvert que la marque Unicode Byte Order Mark (BOM) FF FE & commençait à écrire cela au début du fichier et tout semblait bien - Le fichier a été créé correctement et pourrait être modifié manuellement dans le bloc-notes.Problèmes Unicode/Non-Unicode/UTF-8

Maintenant le problème - Nous sommes allés à la recherche d'un analyseur de fichiers INI au lieu de créer le notre. Propriété Boost L'arbre semblait idéal mais il semble que la BOM ne soit pas filtrée par le wifstream sous-jacent et que finalement l'arbre des propriétés lève une exception à cause de cela.

Ensuite, nous avons essayé SimpleINI link text mais simpleINI (CSimpleIniW) ne semble pas fonctionner à moins que le marqueur UTF-8 soit au début du fichier. Jusqu'à présent, 2 processeurs de fichiers INI apparemment bien développés ne fonctionneront pas avec notre simple fichier INI, nous avons donc commencé à penser que nous prenions la mauvaise approche. En dehors de l'évidence "Devrait avoir utilisé XML" Quels conseils réels pouvez-vous offrir sur ce problème?

MISE À JOUR:

Je travaille maintenant ce. La nomenclature n'était pas le problème. C'était parce que les données n'étaient pas stockées en UTF8. Merci ....

Répondre

1

Utilisez un éditeur de texte qui supprime la nomenclature, tel que Notepad ++.
La suppression de la nomenclature ne pose aucun problème, et il s'agit d'une solution courante dans le développement Web.

+0

Nous n'avons aucun contrôle sur les utilisateurs finaux de l'éditeur de texte qui utilisent le fichier INI. – Canacourse

+0

Ensuite, utilisez un script qui les supprime, si possible. Indiquer à l'utilisateur final quel éditeur de texte il doit utiliser. – Dor

1

Y a-t-il une raison pour laquelle vous n'utilisez pas les API Windows natives pour lire et écrire les profils? L'utilisation des API natives doit garantir que les données seront collectées de manière cohérente par les deux applications, car elles utiliseront les mêmes API exactes.

+0

Oui mais Nous n'avons aucun contrôle sur les utilisateurs finaux de l'éditeur de texte qui utilisent le fichier INI. – Canacourse

2

Si vous prévoyez d'utiliser Unicode dans un fichier INI, une nomenclature est requise. Sans BOM, le lecteur ne sait pas dans quel encodage il se trouve. Il pourrait être en UTF-16 (big/small endian) ou UTF-8. C'est un gros inconvénient du fichier INI. XML a un préambule visible que vous pouvez spécifier l'encodage et c'est beaucoup plus facile à traiter.

Nous utilisons GetPrivateProfileStringW pour lire les fichiers INI en UTF-8 et nous n'avons trouvé aucun problème tant que BOM est présent.

S'il s'agit d'une application Windows, vous devriez vraiment passer au registre. Sinon, XML est la voie à suivre.

+0

Merci. Cant utilisateur du registre. Le fichier Ini est un fichier Cfg qui est créé sur un ordinateur d'administrateurs et traité sur les ordinateurs des utilisateurs finaux. – Canacourse

+0

Il existe plusieurs façons de déployer les modifications de registre. Vous pouvez le faire dans le package d'installation d'une application. Ou dans un intranet, le service informatique peut déployer des modifications de registre sur des ordinateurs. –