2010-04-23 9 views
1

J'essaie d'ouvrir un fichier texte et supprimer tous les caractères spéciaux Nn 'etc ... í áRemplacer les caractères spéciaux à partir d'un fichier

le fichier son d'une disposition que les clients me envoient et je parse pour envoyer le fichier à un serveur AS400 mais je dois supprimer tous les caractères spéciaux.

LE PROBLÈME EST:

certains fichiers avec des caractères spéciaux quand je l'ouvre en C# il lire les caractères spéciaux et deux différents caractères et déplacer toute la ligne d'un espace à droite et ensuite l'information qui doit être dans cette position ne sera pas OK.

i prendre le même fichier et l'ouvrir dans le Bloc-notes et le fichier est OK, mais quand je l'ouvre dans WordPad il ressemble à 2 caractères (pour seulement 1 especial char) Exemple: dans le fichier que j'ai:

"0001 0003JUAN PEÑA33441JPENATEST"

Mais C# il montre

"0001 0003JUAN PEï░A33441JPENATEST"

im en utilisant l'encodage 1251

toute aide?

+0

Vos clients doivent-ils vous envoyer des fichiers au format 1251? Si oui, le font-ils? – AlG

+0

Je ne suis pas sûr de savoir quelle est votre question. Je ne sais pas quels types d'encodage sont supportés par Notepad ou Wordpad, mais la manière dont ces applications affichent votre fichier n'est peut-être pas importante. Que voulez-vous dire par "Mais en C# ça se voit ..."? Voulez-vous dire dans Visual Studio? –

Répondre

0

Vous avez 2 problèmes: La lecture du fichier et la suppression des caractères.

Vous devez lire le fichier dans le codage qui est écrit:

StreamReader readStream = new StreamReader(receiveStream, Encoding.GetEncoding("YOUR FILE ENCODING")); 

Pour supprimer les caractères, vous pouvez le faire à la main ... Voici le code:

private static string CHAR_REPLACE_SRC = "áàãâÁÀÃÂéèêÉÈEíìîÍÌÎóòõôÓÒÕÔúùûÚÙÛçÇñÑ"; 
private static string CHAR_REPLACE_DST = "aaaaAAAAeeeEEEiiiIIIooooOOOOuuuUUUccnN"; 


private static string GetCleanString (string src) 
{ 
    int i = 0; 
    while (i < src.Length) 
    { 
     if (src[i] < 32 || src[i] > 127) 
     { 
      int pos = CHAR_REPLACE_SRC.IndexOf(src[i]); 
      if (pos >= 0) 
       src = src.Replace(CHAR_REPLACE_SRC[pos], CHAR_REPLACE_DST[pos]); 
      else 
       src = src.Remove(i, 1); 
     } 
     else 
      i++; 
    } 
    return src.Replace("\"", "").Replace("?", "").Replace(":", "").Replace("&", "_").Replace("\\", "_").Replace("/", "_"); 
} 

Vous devrez probablement faire quelques adaptations. J'utilise ceci pour créer une URL propre à partir du titre de la page.

Questions connexes