2010-09-06 7 views
5

Je dois créer une sorte de fichier texte dans lequel il y a des chiffres et des lettres hébraïques décodées en ASCII.Comment convertir un hébreu (unicode) en Ascii en C#?

Ceci est la méthode de création de fichier qui déclenche le ButtonClick

protected void ToFile(object sender, EventArgs e) 
{ 
    filename = Transactions.generateDateYMDHMS(); 
    string path = string.Format("{0}{1}.001", Server.MapPath("~/transactions/"), filename); 
    StreamWriter sw = new StreamWriter(path, false, Encoding.ASCII); 
    sw.WriteLine("hello"); 
    sw.WriteLine(Transactions.convertUTF8ASCII("שלום")); 
    sw.WriteLine("bye"); 
    sw.Close(); 
} 

comme vous pouvez le voir, j'utiliser Transactions.convertUTF8ASCII() méthode statique pour convertir chaîne probablement Unicode de .NET à la représentation ASCII de. Je l'utilise sur le terme hébreu 'shalom' et je reviens '????' au lieu du résultat dont j'ai besoin.

Voici la méthode.

public static string convertUTF8ASCII(string initialString) 
{ 
    byte[] unicodeBytes = Encoding.Unicode.GetBytes(initialString); 
    byte[] asciiBytes = Encoding.Convert(Encoding.Unicode, Encoding.ASCII, unicodeBytes); 
    return Encoding.ASCII.GetString(asciiBytes); 
} 

Au lieu d'avoir le mot initial décodé en ASCII, je reçois '????' dans le fichier je crée même si je cours debbuger j'obtiens le même résultat.

Qu'est-ce que je fais mal?

+0

Salut, Alors, comment l'avez-vous résolu? J'ai le même problème. Besoin de convertir unicode hébreu (1400, 1500 etc) en codes ASCII. –

Répondre

2

Vous ne pouvez pas simplement traduire des caractères Unicode arbitraires en ASCII. Le mieux qu'il peut faire est de rejeter les caractères non supportables, d'où ????. Évidemment, les caractères de base de 7 bits fonctionneront, mais pas beaucoup d'autres. Je suis curieux de savoir quel est le résultat attendu?

Si vous avez besoin de ceci pour transférer (au lieu de la représentation), vous pouvez envisager le codage en base 64 des octets UTF8 sous-jacents.

+0

Merci, Marc. J'ai ce type de caractères dans le fichier d'exemple, bien qu'il ne représente pas "shalom" mais vous aurez une idée du type d'encodage. Je ne pouvais pas comprendre ce que vous voulez dire par «transfert» à base-64. – eugeneK

+0

@eugeneK - il n'est toujours pas évident pour moi quelle est la traduction. Je suppose que je devrais voir la séquence d'octets exacte et les points de code de caractères qui sont censés se mapper l'un à l'autre pour "cliquer". –

+0

J'ai l'exigence avec erreur qui m'a conduit à l'ASCII à la première place. Merci pour l'info de toute façon. – eugeneK

2

Voulez-vous dire ANSI, pas ASCII?

ASCII ne définit aucun caractère hébreu. Il y a cependant quelques pages de code ANSI qui font comme « fenêtres-1255 »

Dans ce cas, vous voudrez peut-être envisager de regarder: http://msdn.microsoft.com/en-us/library/system.text.encoding.aspx

En bref, vous avez:

Encoding.ASCII 

vous le remplacer par:

Encoding.GetEncoding(1255) 
+0

vous avez probablement raison. Je n'ai aucune expérience avec l'encodage du tout donc je n'ai jamais su que l'ASCII ne contient pas de caractères hébreux – eugeneK

+0

@eugueK ASCII est à peu près juste l'alphabet anglais, 0-9, la ponctuation de base et certains caractères de contrôle. Ref: http://en.wikipedia.org/wiki/ASCII – userx

+0

nopes, j'ai l'exigence avec erreur qui m'a conduit à l'ASCII à la première place. Merci pour l'info de toute façon. – eugeneK

1

demandez-vous peut-être au sujet transliteration (comme dans "Romanization") i Au lieu de la conversion d'encodage, si vous parlez vraiment d'ASCII?

+0

nopes, j'ai l'exigence avec erreur qui m'a conduit à l'ASCII à la première place. Merci pour l'info de toute façon. – eugeneK

1

Je viens de faire face au même problème lorsque le fichier XML original était en codage ASCII.

Comme USERx suggéré

Encoding.GetEncoding (1255)

XDocument.Parse(System.IO.File.ReadAllText(xmlPath, Encoding.GetEncoding(1255))); 

Alors maintenant, mon fichier XDocument peut lire Hebrew même si le fichier xml a été enregistré en tant que ASCII

Questions connexes