Question

Oui, nous parlons de codes ASCII. Je ne suis pas le développeur de Delphi ici.

Était-ce utile?

La solution

Pour Delphi 7, je recevais la la bibliothèque Unicode gratuite de Mike Lischke , auteur de Virtual Treeview.

La bibliothèque comprend de nombreuses fonctions de conversion pour aller vers et depuis Unicode, vous pouvez donc utiliser celles qui ont le plus de sens dans votre application.

vous pouvez effectuer une mise à niveau vers Delphi 2009. qui possède des routines de codage intégrées et sa propre bibliothèque de fonctions de conversion.

Autres conseils

Mettons quelques choses au clair. Le jeu de caractères (charset) et les codages de caractères sont deux concepts liés mais différents. Un jeu de caractères est une liste abstraite de caractères avec une sorte de code de caractère entier associé. Il existe ensuite des codages de caractères, qui sont essentiellement un algorithme décrivant la manière dont les caractères sont représentés en octets.

ASCII agit à la fois comme jeu de caractères et codage. Il utilise 7 bits pour exprimer 128 caractères (94 imprimables). Unicode est en revanche un jeu de caractères, exprimant 1 114 112 points de code. Il existe plusieurs codages pour représenter les chaînes Unicode, mais les plus remarquables sont UTF-8, UTF-16, UTF-16LE et UTF-32. En d'autres termes, un seul caractère Unicode peut être représenté de différentes manières en fonction des encodages.

  

Comment puis-je convertir des caractères Unicode en codes ASCII dans Delphi 7?

Je pense que la question pourrait être interprétée de deux manières.

  1. Certains encodages contiennent une chaîne Unicode ne contenant que des caractères imprimables ASCII. Comment puis-je convertir la chaîne en un tableau d'octets de codage ASCII?

  2. Certains encodages contiennent une chaîne Unicode qui inclut également des caractères imprimables non-ASCII, tels que des caractères chinois. Comment puis-je coder la chaîne en un codage ASCII sans perdre d’informations, puis la décoder ultérieurement en chaîne Unicode originale?

Si vous voulez dire le premier, vous pouvez charger la chaîne Unicode dans WideString comme le dit Osman et le faire

var
  original: WideString;
  s: AnsiString;
begin
  s := AnsiString(original);

Si vous parlez du second mot, vous aurez besoin d'un algorithme de codage générique tel que le codage Base64 . Vous pouvez utiliser DCPBase64.pas dans le DCPcrypt version 2 bêta 3 .

Cela dépend de votre définition de la conversion. Si vous souhaitez mapper les 127 caractères les plus bas sur l'équivalent Unicode, vous pouvez utiliser une conversion explicite. Mais cela crée des déchets si la chaîne contient des caractères plus élevés.

Si vous voulez des correspondances comme ë - > e et û - > vous pouvez écrire votre propre code. Mais sachez qu'il y a toujours des caractères qui ne peuvent pas être convertis.

& ASC; ASCII " est le nom d'un mappage spécifique de caractères sur des nombres, mais certaines personnes disent "code ASCII". quand ils ne veulent pas vraiment dire ASCII du tout; ils veulent juste la valeur numérique d'un caractère, quel que soit le mappage en vigueur à ce moment-là. Cette description vous concerne-t-elle?

Si tel est le cas, vous pouvez utiliser la fonction standard Ord pour obtenir la valeur en points de code Unicode du caractère Unicode dont vous disposez.

var
  wc: WideChar;
  ws: WideString;
  x: Word;

x := Ord(wc);
x := Ord(ws[1]);

Si vous vouliez vraiment parler d'ASCII, vous devrez alors préciser le type de conversion que vous envisagez.

Par exemple, la lettre A est représentée en Unicode sous la forme U + 0041 et en ANSI en tout juste 41. La conversion serait donc simple, mais vous devez savoir comment le caractère Unicode est codé. Les plus courants sont UTF-16 et UTF-8. UTF 16 correspond à deux octets par caractère, mais même dans ce cas, il s’agit d’une simplification excessive, puisqu'un caractère peut avoir plus d’octets. UTF-8 semble signifier que cela signifie 1 octet par caractère mais peut être 2 ou 3. Pour compliquer encore les choses, UTF-16 peut être petit ou grand endian. (U + 0041 ou U + 4100).

Si votre question n’a aucun sens, vous devez par exemple convertir la lettre arabe ain U + 0639 en ansi dans une langue anglaise. Vous ne pouvez pas.

Voir les questions connexes sur la conversion d'Unicode en ASCII:

En général, un jeu de caractères de centaines de milliers d'entrées ne peut pas être converti en un jeu de caractères de 127 entrées sans perte d'informations ou de schéma de codage.

Vous pouvez utiliser la fonction dans http://swissdelphicenter.ch/en/showcode .php? id = 1692
Il convertit la chaîne Unicode en chaîne Ansi à l'aide de la page de code spécifiée.
Si vous souhaitez convertir à l'aide de la page de code système par défaut (définie dans les options régionales en tant que page de code non-unicode), vous pouvez le faire simplement comme suit:

var
  ws: widestring;
  s: string;
begin
  s:=string(ws)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top