Une autre question concerne. Unicode, les terminaux et maintenant C# et wc
. Si je vous écris ce simple morceau de codeTextWriter.ReadToEnd par rapport à Unix wc Commande
int i=0;
foreach(char c in Console.In.ReadToEnd())
{
if(c!='\n') i++;
}
Console.WriteLine("{0}", i);
et entrée seulement le caractère "€" (3 octets utf-8), wc
renvoie 3 caractères (en utilisant peut-être wint_t, bien que je n'ai pas vérifié), mais ReadToEnd()
renvoie 1 (un caractère). Quel est exactement le comportement de ReadToEnd
dans ce cas? Comment puis-je savoir ce que fait ReadToEnd
dans les coulisses? Je lance xterm initialisé avec utf-8.en.US, exécutant Linux Ubuntu et Mono.
Merci.
Donc, question de suivi rapide. Si je devais écrire le même programme en C, en utilisant wchar ou wint_t je gaspillerais (deux fois) de l'espace. Dans ce cas, c'est trivial, parce que c'est juste 16 bits mais dans les fichiers énormes la différence est perceptible. Est-ce correct? –
Cela dépend. Si vous traitez du texte en anglais, un type de caractères de 8 bits et un encodage Latin-1 ou UTF-8 prendront probablement le moins d'espace. Si vous manipulez du texte chinois ou japonais, UTF-8 sera moins efficace que les autres encodages et Latin-1 ne pourra pas représenter votre texte du tout. Pour cette utilisation, UTF-16, UCS-2 ou l'un des codages spécifiques au langage serait plus compact. Notez également qu'il est également beaucoup plus compliqué de travailler avec des encodages où les caractères ont un nombre variable d'octets. Le choix d'un codage plus compact peut ralentir le traitement de votre texte. – rpetrich