Pregunta

Sí, estamos hablando de códigos ASCII. Mis disculpas, no soy el desarrollador de Delphi aquí.

¿Fue útil?

Solución

Para Delphi 7, obtendría la biblioteca Unicode gratuita por Mike Lischke quien es el autor de Virtual Treeview.

La biblioteca incluye muchas funciones de conversión para ir y volver de Unicode, por lo que puede utilizar las que tengan más sentido en su aplicación.

O puede actualizar a Delphi 2009 que tiene rutinas de codificación incorporadas y su propia biblioteca de funciones de conversión.

Otros consejos

Vamos a aclarar algunas cosas. El juego de caracteres (juego de caracteres) y las codificaciones de caracteres son dos conceptos relacionados pero diferentes. Un conjunto de caracteres es una lista abstracta de caracteres con algún tipo de código de caracteres entero asociado. Luego están las codificaciones de caracteres, que es básicamente un algoritmo que describe cómo se representan los caracteres en bytes.

ASCII actúa como el conjunto de caracteres y la codificación. Utiliza 7 bits para expresar 128 caracteres (94 imprimibles). Unicode , por otro lado, es un conjunto de caracteres que expresa 1.114.112 puntos de código. Hay varias codificaciones para representar cadenas Unicode, pero las más notables son UTF-8, UTF-16, UTF-16LE y UTF-32. En otras palabras, un solo carácter Unicode se puede representar de diferentes maneras dependiendo de las codificaciones.

  

¿Cómo puedo convertir caracteres Unicode a códigos ASCII en Delphi 7?

Creo que la pregunta podría interpretarse de dos maneras.

  1. Tengo una cadena Unicode en alguna codificación que solo incluye caracteres imprimibles ASCII. ¿Cómo puedo convertir la cadena en una matriz de bytes de codificación ASCII?

  2. Tengo una cadena Unicode en alguna codificación que también incluye caracteres imprimibles que no son ASCII, como los caracteres chinos. ¿Cómo puedo codificar la cadena en una codificación ASCII sin perder información y luego volver a decodificarla en la cadena Unicode original?

Si te refieres al primero, puedes cargar la cadena Unicode en WideString como Osman dice y hace

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

Si te refieres al segundo, necesitarías un algoritmo de codificación genérico como Base64 . Puede utilizar DCPBase64.pas incluido en DCPcrypt v2 Beta 3 .

Depende de cuál sea su definición de conversión. Si desea asignar los 127 caracteres más bajos al equivalente Unicode, puede usar un reparto explícito. Pero esto crea basura si la cadena contiene caracteres más altos.

Si desea asignaciones como ë - > e y û - > Puedes escribir tu propio código. Pero tenga en cuenta que siempre hay caracteres que no se pueden convertir.

" ASCII " es el nombre de una asignación específica de caracteres a números, pero algunas personas dicen " código ASCII " cuando en realidad no se refieren a ASCII en absoluto; solo quieren el valor numérico de un personaje, cualquiera que sea la asignación vigente en ese momento. ¿Se aplica esa descripción a usted?

Si es así, puede usar la función estándar Ord para obtener el valor de punto de código Unicode de cualquier carácter Unicode que tenga.

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

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

Sin embargo, si realmente quisiste decir ASCII, entonces tendrás que ser más específico sobre qué tipo de conversión tienes en mente.

Como ejemplo, la letra A se representa en unicode como U + 0041 y en ansi como solo 41. Por lo tanto, la conversión sería bastante simple, pero debe averiguar cómo se codifica el carácter unicode. Los más comunes son UTF-16 y UTF-8. UTF 16 es básicamente dos bytes por carácter, pero incluso eso es una simplificación excesiva, ya que un carácter puede tener más bytes. UTF-8 suena como si significara 1 byte por carácter pero puede ser 2 o 3. Para complicar aún más las cosas, UTF-16 puede ser little endian o big endian. (U + 0041 o U + 4100).

Donde su pregunta no tiene sentido es si desea, por ejemplo, convertir la letra árabe ain U + 0639 a ansi en un idioma inglés. No puedes.

Consulte las preguntas relacionadas sobre la conversión de Unicode a ASCII:

En general, el conjunto de caracteres de cientos de miles de entradas no se puede convertir en un conjunto de caracteres de 127 entradas sin alguna pérdida de información o esquema de codificación.

Puede usar la función en http://swissdelphicenter.ch/en/showcode .php? id = 1692
Convierte una cadena Unicode en una cadena Ansi usando la página de códigos especificada.
Si desea realizar la conversión utilizando la página de códigos del sistema predeterminada (definida en las opciones regionales como página de códigos no Unicode), puede hacerlo simplemente de la siguiente manera:

var
  ws: widestring;
  s: string;
begin
  s:=string(ws)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top