2010-12-06 11 views
0

Je suis l'extraction de chaîne à partir d'un tableau d'octets. La chaîne est un script SQL.Caractère indésirable lors de l'utilisation de System.Text.Encoding.GetEncoding.GetString

String sql = System.Text.Encoding.GetEncoding(1200).GetString(script); 

Le premier caractère sortira pour être indésirable (case carrée dans l'aperçu). En raison de laquelle tout le script échoue. Une idée de pourquoi cela se passe?

Je ne souhaite pas supprimer le premier caractère. Plus intéressé à savoir pourquoi et comment cela peut être évité.

+0

Il n'y a pas de différence entre '' System.Text.Encoding.GetEncoding' et System.Text.UTF32Encoding.GetEncoding' . J'ai supprimé la référence à 'UTF32Encoding' car cela pourrait dérouter les gens. – dtb

+0

Avez-vous la séquence réelle des octets? –

+0

@lganacio: Séquence réelle? 'script' est un tableau d'octets. –

Répondre

2

Le ou les premiers caractères sont probablement Byte Order Marks (BOM).

Vous pouvez utiliser un StreamReader pour détecter automatiquement toute nomenclature et sélectionnez le codage approprié:

byte[] script; 
string sql; 

using (var reader = new StreamReader(new MemoryStream(script), true)) 
{         //       ↑ 
    sql = reader.ReadToEnd();  //  detectEncodingFromByteOrderMarks 
}