Estoy imprimiendo desde Visual Basic utilizando Open para aperturar el puerto LPT1 e imprimir con Print #1. Pero las letras acentuadas y la letra ñ es sustituida por otros caracteres. ¿Cómo hago para que estas letras se impriman correctamente?
1 Respuesta
Respuesta de rogersr
1
1
rogersr, Ingeniero de Sistemas Especialista en Teleinformática Programador...
Esta rutina la bajé de la Página de el Guille (guille. Costasol.net) que no se diga que no doy los créditos ... y funcionan muy bien. Antes de usar la función, (FiltroMSDOS), se debe llamar al procedimiento que inicializa el array (IniciarFiltroMSDOS). Este array debe estar en el mismo módulo en el que se encuentran la función y el procedimiento. Para usarlo tendrás que hacer algo por el estilo a esto: sMSDOS = FiltroMSDOS("La cigüeña") 'En la parte de las declaraciones del módulo Dim iASCII(1 To 63) As Integer 'Para conversión a MS-DOS 'Este sub se debe llamar antes de usar la función Public Sub IniciarFiltroMSDOS() 'Convertir de ANSI (windows) a ASCII (dos) Dim i As Integer Dim p As Integer ' p = 0 For i = 128 To 156 'de Ç a £ 29 p = p + 1 iASCII(p) = i Next For i = 160 To 168 'de á a ¿ 9 p = p + 1 iASCII(p) = i Next For i = 170 To 175 'de ¬ a » 6 p = p + 1 iASCII(p) = i Next '44 códigos asignados hasta aquí iASCII(45) = 225 'ß iASCII(46) = 230 'µ iASCII(47) = 241 '± iASCII(48) = 246 '÷ iASCII(49) = 253 '² iASCII(50) = 65 'Á (A) iASCII(51) = 73 'Í (I) iASCII(52) = 79 'Ó (O) iASCII(53) = 85 'Ú (U) iASCII(54) = 73 'Ï (I) iASCII(55) = 65 'À (A) iASCII(56) = 69 'È (E) iASCII(57) = 73 'Ì (I) iASCII(58) = 79 'Ò (O) iASCII(59) = 85 'Ù (U) iASCII(60) = 69 'Ë (E) For i = 61 To 63 ''`´ (') iASCII(i) = 39 Next End Sub Public Function FiltroMSDOS(sWIN As String) As String 'Filtrar la cadena para convertirla en compatible MS-DOS Const sANSI = "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£áíóúñѪº¿¬½¼¡«»ßµ±÷²ÁÍÓÚÏÀÈÌÒÙË'`´" ' Dim i As Integer Dim p As Integer Dim sC As Integer Dim sMSD As String 'Aquí se puede poner esta comparación para saber 'si el array está inicializado. 'De esta forma no será necesario llamar al procedimiento 'de inicialización antes de usar esta función. '(Deberás quitar los comentarios) 'If iASCII(1) = 0 Then 'El primer valor debe ser 128 ' IniciarFiltroMSDOS 'End If sMSD = "" For i = 1 To Len(sWIN) sC = Asc(Mid$(sWIN, i, 1)) p = InStr(sANSI, Chr$(sC)) If p Then sC = iASCII(p) End If sMSD = sMSD & Chr$(sC) Next FiltroMSDOS = sMSD End Function Suerte ! Rogers R.