2009-07-15 9 views
0

Je n'arrive pas à trouver la réponse à cette question.Problème d'encodage: vbscript "Chr()" à .Net C#

Il me semble que je devrais pouvoir passer d'un nombre à un caractère en C# en faisant simplement quelque chose le long des lignes (char) MyInt pour dupliquer le comportement de la fonction Chr() de vb; Cependant, ce n'est pas le cas:

Dans VB Script w/une page asp, si mon code dit ceci:

Response.Write(Chr(139)) 

Il produit ceci:

‹ (character code 8249) 

Opposé à ceci:

(code de caractère 139)

Il me manque quelque chose avec l'encodage, mais je ne le trouve pas. Quel encodage utilise Chr()?

Répondre

6

Chr() utilise l'encodage par défaut du système, je crois - il est donc à peu près équivalent à:

byte[] bytes = new byte[] { 139 }; 
char c = Encoding.Default.GetString(bytes)[0]; 

Sur ma boîte (Windows CP1252 comme valeur par défaut) qui ne donne en effet Unicode 8249.

+0

Effectivement, ça l'a fait! Merci! – John

1

Si vous lancez un int en char, vous obtiendrez le caractère avec le code de caractère Unicode qui était dans l'entier. Le type de données char est juste un code de caractères 16 bits UTF-16.

Pour obtenir l'équivalent de la fonction chr() VBScript dans .NET vous besoin de quelque chose comme:

string s = Encoding.Default.GetString(new byte[]{ 139 }); 
2

Si vous voulez appeler quelque chose qui a exactement le comportement de Chr de VB de C#, puis, pourquoi ne pas simplement l'appeler plutôt que d'essayer de déduire son comportement?

Il suffit de mettre un "en utilisant Microsoft.VisualBasic;" En haut de votre programme C#, ajoutez la DLL d'exécution VB à vos références et allez en ville.