|
Leyendo archivos DOS con caracteres especiales
Copyright © 2000 Ernesto
De Spirito
A veces tenemos que leer archivos DOS guardados con aplicaciones DOS.
No hay problema con le lectura en sí misma, pero Windows y DOS usan de
modo predeterminado diferentes páginas de códigos para mapear los caracteres
ASCII especiales.
Por ejemplo, en DOS (página de códigos 437 -IBM estándar- y otras páginas
de códigos típicamente usadas en DOS), el símbolo "registrado"
('®') se representa en un byte con el valor 169. Sin
embargo, en Windows (págia de códigos 1252 y otras páginas de códigos
típicamente usadas en Windows), el valor 169 corresponde al símbolo de
copyright ('©') y el símbolo de "registrado"
('®') tiene un valor de 174. Algo similar ocurre con otros
símbolos como los las vocales acentadas por ejemplo.
Si los datos leídos de un archivo DOS se van a mostrar o guardar en
formato Windows deberemos convertir los caracteres (por ejemplo reemplazando
los valores 169 por 174 y así sucesivamente) de modo que sean representados
correctamente en Windows.
Podemos usar la función OemToChar de la API de Windows para
convertir una variable de cadena in-situ:
uses Windows;
...
var
s: string;
...
begin
...
OemToChar(PChar(s), PChar(s));
...
end;
La conversión inversa (o sea de Windows a DOS) se logra con la función
API CharToOem.
|