SoloCodigo

Informática en general => Dudas informáticas => Mensaje iniciado por: AnioN en Miércoles 14 de Febrero de 2007, 15:33

Título: Unicode+ascii
Publicado por: AnioN en Miércoles 14 de Febrero de 2007, 15:33
Hola, es una pregunta muy basica la que estoy haciendo pero no me queda clara. Busque en la wikipedia para ver las definiciones de los dos y no me queda clara la relacion que hay entre ellos. Lo que entendi es que UNICODE es una forma de codificar cada caracter con un numero e incluye todos los idiomas, pero ASCII, es mas reducido?
Título: Re: Unicode+ascii
Publicado por: Eternal Idol en Miércoles 14 de Febrero de 2007, 15:46
ASCII es mucho mas reducido, es apenas de 0 a 127. Por dar un ejemplo recien en el ASCII extendido (que varia segun la configuracion local) tenes la ñ (164) y Ñ (165).

Unicode es muchisimo mas poderoso, usa por lo general dos bytes en lugar de uno para cada caracter y contiene todos los caracteres ASCII con su mismo valor.

Un ejemplo cadena "HOLA" en decimal:

ASCII: 72 - 79 - 76 - 65
Unicode: 72 - 00 - 79 - 00 - 76 - 00 - 65 - 00
Título: Re: Unicode+ascii
Publicado por: AnioN en Miércoles 14 de Febrero de 2007, 22:51
ahhh, ok. Ahora voy entendiendo como viene el tema. Muchas Gracias.
Título: Re: Unicode+ascii
Publicado por: Eternal Idol en Miércoles 14 de Febrero de 2007, 22:59
De nadas  B)
Título: Re: Unicode+ascii
Publicado por: AnioN en Jueves 15 de Febrero de 2007, 15:51
otra duda me surgio...como se cual estoy utilizando?, o sea, quien lo determina y como?
Título: Re: Unicode+ascii
Publicado por: Eternal Idol en Jueves 15 de Febrero de 2007, 16:18
Cita de: "AnioN"
otra duda me surgio...como se cual estoy utilizando?, o sea, quien lo determina y como?
Eso dependera del entorno ... en VC++ por ejemplo las cadenas por defecto son ASCII y tenes que anteponer una L (asi: L"HOLA") para que la cadena sea Unicode. Mientras que el Kernel de Windows (gama NT) y la NTDLL.dll usan cadenas Unicode, por eso la API de Windows provee generalmente dos funciones con nombres ligeramente diferentes si se pasan parametros de cadena:

FuncionA (ANSI)
FuncionW (Wide)

Un ejemplo es GetModuleFileName y este es su prototipo:
DWORD GetModuleFileName(HMODULE hModule, LPTSTR lpFilename, DWORD nSize);

Si estamos trabajando en Unicode (hay unos defines UNICODE e _UNICODE creo que eran) el tipo LPTSTR sera una cadena LPWSTR (Wide) y sino sera LPSTR (ANSI).