Estou desenvolvendo programas onde tem de mostrar na tela textos diversos e, consequentemente tenho de utilizar acentos como ã, õ, ú, etc.
O problema é que no XP, abro uma secção do DOS (utilizo o Xtgold) em janela inteira e os caracteres aparecem diferentes, mas, quando passo para modo janela os caracteres aparecem correctamente. O mesmo ocorre quando a aplicação vai ser executada em máquinas com o DOS.
Sei que tem a ver com o código de página do sistema operacional da máquina onde se está "rodando" o programa, mas não sei qual e se posso alterar este código de página.
Alguém passou por este problema e conseguiu resolver?
Obrigado
Sérgio.
Caracteres acentuados no DOS e no Windows.
Moderador: Moderadores
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Caracteres acentuados no DOS e no Windows.
Pois é Sergio, assim como estes tópicos:
viewtopic.php?f=1&t=9169&p=51789&hilit=OEM#p51789
viewtopic.php?f=1&t=9170
que falam dessa dificuldade tanto na exibição quanto na leiturra/gravação de arquivo, se deve porque estás usando caracteres de padrões diferentes: OEM e ANSI.
Se houvesse alguma forma de saber se a sessão onde o aplicativo Clipper estviver sendo rodado, isto é se soubéssemos se é tela cheia ou janelado, poderiamos até contornar essa situação. A minha idéia é alterar o padrão de caracteres e carregála conforme o modo de exibição da tela. Também iríamos resolver muitos outras limitações, mas pelo que eu lembro, ainda não existe algo concreto para identificar se está em modo janelado ou tela cheia, ao menos para WINXP, porque para WIN98 ja existe uma forma de saber isto. A ultima vez que foi falado disto o Maligno se dispus a fazer tentativas para incorporar mais esta função ao WAPI, mas até agora parece que não teve bons resultados...
O melhor (por enquanto) é não utilizar acentuações que diveregem entre um padrão e outro ou até então utilizar tudo em modo gráfico.
viewtopic.php?f=1&t=9169&p=51789&hilit=OEM#p51789
viewtopic.php?f=1&t=9170
que falam dessa dificuldade tanto na exibição quanto na leiturra/gravação de arquivo, se deve porque estás usando caracteres de padrões diferentes: OEM e ANSI.
Se houvesse alguma forma de saber se a sessão onde o aplicativo Clipper estviver sendo rodado, isto é se soubéssemos se é tela cheia ou janelado, poderiamos até contornar essa situação. A minha idéia é alterar o padrão de caracteres e carregála conforme o modo de exibição da tela. Também iríamos resolver muitos outras limitações, mas pelo que eu lembro, ainda não existe algo concreto para identificar se está em modo janelado ou tela cheia, ao menos para WINXP, porque para WIN98 ja existe uma forma de saber isto. A ultima vez que foi falado disto o Maligno se dispus a fazer tentativas para incorporar mais esta função ao WAPI, mas até agora parece que não teve bons resultados...
O melhor (por enquanto) é não utilizar acentuações que diveregem entre um padrão e outro ou até então utilizar tudo em modo gráfico.
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Caracteres acentuados no DOS e no Windows.
Fiquei pesquisando na INTERNET sobre o assunto, numa dessas consigo encontrar uma função que devolva se estou usando o padrão OEM ou ANSI em determinada sessão... mas até agora não achei.
Em contrapartida achei um conceito muito importante que tem um relato histórico no WIKI: http://local.joelonsoftware.com/wiki/O_ ... _Desculpas!)
Este é um assunto em que nós todos como programadores devemos saber...
Lembro também que aplicações em modo console em Java, também acontecesse de exibir em ANSI portanto inviabilizando a exibição correta de caracteres acentuados, e neste outro artigo (final da matéria) ensina que podemos mudar no registro para que a exibição perdure. Quem quiser conferir: http://malbarbo.pro.br/raqueando/tag/acentuacao/ agora não sei se fazendo isto iria resolver seu caso, talvez mudando para o codepage apropriado para o padrão que é utilizado em Portugal.
Em contrapartida achei um conceito muito importante que tem um relato histórico no WIKI: http://local.joelonsoftware.com/wiki/O_ ... _Desculpas!)
Este é um assunto em que nós todos como programadores devemos saber...
Lembro também que aplicações em modo console em Java, também acontecesse de exibir em ANSI portanto inviabilizando a exibição correta de caracteres acentuados, e neste outro artigo (final da matéria) ensina que podemos mudar no registro para que a exibição perdure. Quem quiser conferir: http://malbarbo.pro.br/raqueando/tag/acentuacao/ agora não sei se fazendo isto iria resolver seu caso, talvez mudando para o codepage apropriado para o padrão que é utilizado em Portugal.
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Re: Caracteres acentuados no DOS e no Windows.
Buenas Colegas,
Não sei se ajuda, para pode pegar o exemplo abaixo compilar em xharbour e usar no clipper com RUN, essas funções abaixo fazem exatamente o que o colega Pablo citou, de fazer a verificação se esta em padrão ANSI ou OEM.
Exemplo de uso:
Não sei se ajuda, para pode pegar o exemplo abaixo compilar em xharbour e usar no clipper com RUN, essas funções abaixo fazem exatamente o que o colega Pablo citou, de fazer a verificação se esta em padrão ANSI ou OEM.
Exemplo de uso:
Código: Selecionar todos
if ISANSI("texto ANSI")
alert("esta no padrão ANSI")
elseif ISOEM("texto OEM")
alert("esta no padrão OEM")
endif
Código: Selecionar todos
#pragma BeginDump
#include "hbapi.h"
#include "windows.h"
HB_FUNC( ISANSI)
{
LPBYTE pMyString;
WORD pos;
BOOL bRetorno = FALSE;
pos = 0;
pMyString = ( LPBYTE ) hb_parc( 1 );
while( pos < (WORD) hb_parclen( 1 ) && ! bRetorno )
{
bRetorno = ( pMyString[ pos ] >= 224 && pMyString[ pos ] <= 255 ) || pMyString[ pos ] == 128;
pos++;
}
hb_retl( bRetorno );
}
HB_FUNC( ISOEM )
{
LPBYTE pMyString;
WORD pos;
BOOL bRetorno = FALSE;
pos = 0;
pMyString = ( LPBYTE ) hb_parc( 1 );
while( pos < (WORD) hb_parclen( 1 ) && ! bRetorno )
{
bRetorno = pMyString[ pos ] > 128 && pMyString[ pos ] <= 168;
pos++;
}
hb_retl( bRetorno );
}
#pragma EndDump
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
-
spereira
- Usuário Nível 2

- Mensagens: 85
- Registrado em: 19 Jul 2004 11:42
- Localização: Porto - Portugal
Re: Caracteres acentuados no DOS e no Windows.
Obrigado a todos pelas respostas.
Para resolver o problema, fiz, manualmente, a alteração dos caracteres, por exemplo o que eu digitava ã e aparecia um caracter estranho, troquei para ä e passou a aparecer no MS-DOS ã. O mesmo fiz com a letra õ, pois digitei ö e sai corretamente no MS-DOS como õ.
O que descobri também é que se eu utilizar um editor de textos qualquer no MS-DOS para criar os programas, o que eu digito aparece corretamente quando for exibido na tela.
Obrigado
Sérgio.
Para resolver o problema, fiz, manualmente, a alteração dos caracteres, por exemplo o que eu digitava ã e aparecia um caracter estranho, troquei para ä e passou a aparecer no MS-DOS ã. O mesmo fiz com a letra õ, pois digitei ö e sai corretamente no MS-DOS como õ.
O que descobri também é que se eu utilizar um editor de textos qualquer no MS-DOS para criar os programas, o que eu digito aparece corretamente quando for exibido na tela.
Obrigado
Sérgio.
Sérgio Pereira