2

J'essaie d'acquérir une compréhension de base de ce que l'on entend par une page de code Windows. J'ai l'impression que c'est une traduction entre une valeur donnée de 8 bits et une certaine «abstraction» pour un graphisme donné.Que sont les pages de codes Windows?

J'ai fait l'expérience suivante. J'ai créé un "" caractère littéral avec deux versions de la lettre u avec un tréma. Un créé en utilisant la valeur ALT 129 (utilise la page de code 437) et l'autre en utilisant la valeur ALT 0252 (utilise la page de code 1252). Quand j'examiné le littéral les deux personnages avaient la valeur 252.

est-252 l'abstraction 8 bits universel pour u avec un tréma? Est-ce la valeur Unicode?

En dehors de l'entrée du clavier sont là des routines de bibliothèque ou appels système que les pages de code d'utilisation? Par exemple existe-t-il une fonction pour traduire une chaîne en utilisant une table de codes donnée (comme ci-dessus pour la valeur ALT 129)?

Répondre

3

pages de code Windows sont une relique de jours pré-unicode, lorsque les langues avec des personnages différents seraient toujours tenter de les représenter à l'aide d'un (ou deux dans le cas de l'Asie) octets. C'est là que le concept d'un jeu de caractères entre en scène. L'anglais, par exemple, est "windows-1252". Les différentes pages de code peuvent être installées via le panneau de configuration Options de langue régionales &. Vous trouverez une liste de pages de codes ici - http://msdn.microsoft.com/en-us/goglobal/bb964654.aspx

Dans .NET, les pages de codes sont accessibles via la classe System.Text.Encoding. Cela fournit une méthode de conversion d'une page de code à une autre. Par exemple, pour convertir une chaîne dans Windows 1252 à UTF8 (il est vrai en général un exercice assez inutile), vous pouvez utiliser ce code:

using System.Text; 

public string GetUtf8StringFromDefaultEncoding(string target, string codePage) { 
    Encoding windows = Encoding.GetEncoding(codePage); 
    byte[] windowsBytes = windows.GetBytes("Hello World"); 
    string utf8String = new UTF8Encoding().GetString(windowsBytes); 
    return utf8String; 
} 

public static void Main() { 
    Console.Out.WriteLine(GetUtf8StringFromDefaultEncoding("Hello World", 
          "windows-1252")); 
} 
+0

sont-il des routines du système windows ou des fonctions de bibliothèque appelable de C++ pour travailler avec des pages de code? –

+0

Je ne suis pas tout à fait sûr, mais un coup d'oeil sur le site msdn suggère ce lien - http://msdn.microsoft.com/fr-fr/library/dd374085% 28VS.85% 29.aspx –

1

Une page de codes Windows est similaire à un jeu de codes tel que ISO 8859-1. Il met en correspondance certains nombres (comment les caractères sont stockés sur le disque) avec certains glyphes (les caractères tels qu'ils apparaissent à l'écran, de façon abstraite). Il ne correspond pas directement à une police - bien qu'une police puisse supporter un ensemble de code ou une page de code donné. Par exemple, les polices Courier New et Times Roman peuvent être utilisées pour afficher CP1252 et elles sont différentes à l'écran, même si les données sur le disque sont identiques.

Les 256 premiers points de code Unicode de sont les mêmes que les points de code de la norme ISO 8859-1. Dans l'ISO 8859-1, le point de code 252 (0xFC) est LA LETTRE MINUSCULE LATINE U AVEC DIAERESIS (familièrement, u-avec-tréma ou «ü»).

Il existe des fonctions de conversion d'ensembles de codes; le ICU en supporte certains. Il y a des convertisseurs de jeu de codes spécifiques à Windows, je n'en doute pas; Je ne sais pas quels sont leurs noms. Cela dépendra, en partie, de la ou des langues que vous utilisez.

0

fenêtres Une page de code est un moyen destiné à traduire une valeur de 8 bits pour un caractère. La plupart des ordinateurs Windows aux États-Unis utilisent Windows-1252.

Les nouveaux programmes Windows utilisent généralement UTF-8 pour stocker des fichiers texte et utiliser en interne des chaînes étendues UTF-16. Cela élimine les problèmes de page de codes, de sorte qu'un fichier texte écrit en Hongrie sera le même lorsqu'il sera ouvert aux États-Unis.

1

Here est une lecture incontournable explication des ensembles de caractères Unicode (y compris pages de code) de Joel Spolsky

+1

+1 pour l'excellent lien Spolsky. C'est vraiment l'information minimale que tout programmeur devrait connaître, présentée de manière amusante. Et les simplifications ne sont pas vraiment des mensonges, comme cela arrive souvent avec des simplifications. –

Questions connexes