Lire un fichier avec des caractères Unicode
J'ai un asp.net c# page et suis en train de lire un fichier qui a la suite de personnage "et de les convertir en". (À partir incliné apostrophe à l'apostrophe).
FileInfo fileinfo = new FileInfo(FileLocation);
string content = File.ReadAllText(fileinfo.FullName);
//strip out bad characters
content = content.Replace("’", "'");
Cela ne fonctionne pas et il change l'inclinaison des apostrophes ? les marques.
source d'informationauteur chris
Vous devez vous connecter pour publier un commentaire.
Je soupçonne que le problème n'est pas avec le remplacement, mais plutôt avec la lecture du fichier lui-même. Lorsque j'ai essayé ce que la nieve façon (à l'aide de Word et copier-coller) je me suis retrouvé avec les mêmes résultats que vous, cependant l'examen de
content
a montré que l' .Net framework croire que le personnage était de caractères Unicode65533
c'est à dire "WTF?" caractère avant la chaîne de remplacement. Vous pouvez le vérifier vous-même en examinant pertinentes caractère dans le débogueur de Visual Studio, où il doit afficher le code de caractère:La raison pour laquelle le remplacer n'est pas le travail, c'est simple -
content
ne contient pas la chaîne que vous avez donné:Quant à savoir pourquoi la lecture du fichier ne fonctionne pas correctement, vous utilisez probablement le mauvais encodage lors de la lecture du fichier. (Si l'encodage n'est pas spécifiée, alors le .Net framework va essayer de déterminer l'encodage correct pour vous, cependant il n'est pas 100% fiable pour ce faire, et donc, souvent, il peut se tromper). Le exacte de l'encodage vous avez besoin dépend du fichier lui-même, mais dans mon cas, le codage utilisé est ASCII étenduet donc de lire le fichier que j'ai juste besoin de spécifier l'encodage correct:
(Voir cette question).
Vous devez également vous assurez-vous de spécifier le caractère correct dans votre chaîne de remplacement - lors de l'utilisation de "bizarre" de caractères dans le code, vous pouvez trouver plus fiable pour spécifier le caractère par son code de caractère, plutôt que comme une chaîne littérale (qui peut causer des problèmes si l'encodage du fichier source change), par exemple les éléments suivants fonctionné pour moi:
Mon pari est que le fichier est encodé en Windows-1252. C'est presque la même que la norme ISO 8859-1. La différence est Windows-1252 utilise des "caractères affichables plutôt que des caractères de contrôle dans le 0x80 pour 0x9F gamme". (Qui est l'endroit où l'inclinaison de l'apostrophe est situé. c'est à dire 0x92)
Si vous utilisez de la Ficelle (en majuscule) et pas de chaîne, il doit être capable de gérer Unicode vous jeter à elle. Essayer d'abord et voir si cela fonctionne.