Combien d'octets un string
va prendre dépend de l'encodage que vous choisissez (ou est automatiquement choisi en arrière-plan à votre insu). Cet exemple de code montre la différence :
void Main()
{
string text = "a";
Console.WriteLine("{0,15} length: {1}", "String", text.Length);
PrintInfo(text, Encoding.ASCII); // Note that '' cannot be encoded in ASCII, information loss will occur
PrintInfo(text, Encoding.UTF8); // This should always be your choice nowadays
PrintInfo(text, Encoding.Unicode);
PrintInfo(text, Encoding.UTF32);
}
void PrintInfo(string input, Encoding encoding)
{
byte[] bytes = encoding.GetBytes(input);
var info = new StringBuilder();
info.AppendFormat("{0,16} bytes: {1} (", encoding.EncodingName, bytes.Length);
info.AppendJoin(' ', bytes);
info.Append(')');
string decodedString = encoding.GetString(bytes);
info.AppendFormat(", decoded string: \"{0}\"", decodedString);
Console.WriteLine(info.ToString());
}
Sortie :
String length: 3
US-ASCII bytes: 3 (97 63 63), decoded string: "a??"
Unicode (UTF-8) bytes: 5 (97 240 159 161 170), decoded string: "a"
Unicode bytes: 6 (97 0 62 216 106 220), decoded string: "a"
Unicode (UTF-32) bytes: 8 (97 0 0 0 106 248 1 0), decoded string: "a"
0 votes
Vérifiez cette réponse .
14 votes
Vous demandez combien de mémoire une
string
occupe, ou combien d'octets la représentation d'une chaîne de caractères occupera lorsqu'elle sera écrite dans un fichier ou envoyée sur un réseau (c'est-à-dire encodée), car ce sont deux questions complètement différentes. majidgeek a presque répondu à la première question, tandis que diya a répondu à la seconde (au moins pour deux encodages courants).0 votes
Duplicata possible de combien d'octets faudra-t-il ?
0 votes
@AllonGuralnek:Bon point. Savez-vous pourquoi diya ci-dessous n'a pas suggéré d'utiliser System.Text.Encoding.Unicode.GetByteCount à la place ? Pourquoi la partie ASCIIEncoding ?
0 votes
@Giorgi : Depuis
Unicode
est une propriété statique deSystem.Text.Encoding
qui est la classe de base deASCIIEncoding
les deux déclarations sont en fait identiques. Vous pouvez également accéder à un membre statique à partir de sous-classes (mais ce n'est pas considéré comme idiomatique).