Clipper On Line • Ver Tópico - versao unicode ou ansi - o retorno

versao unicode ou ansi - o retorno

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

 

versao unicode ou ansi - o retorno

Mensagempor marcelosantos » 09 Ago 2013 18:17

Pessoal saudações.

sobre a HMG ansi ou Unicode, gostaria de saber se a mudança é meramente na forma de visualizar as informações ou os comandos do harbour sofreram algum impacto? comandos como (alltrim(), at(), upper(), lower() e outros).

por exemplo temos o seguinte código:

a="harbour"

b=upper(a)

com a versão Unicode , haverá mudanças nesses comandos que trabalham com strings ?
haverá mudanças nos demais comandos que de certa forma manipulam a informação caractere?
haverá mudança na estrutura dos arquivos .dbf ?

ou alguma mudança importante ao dar um find ou seek no dbf ou ate mesmo um locate.

grande abraço a todos

Marcelo
marcelosantos
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 64
Data de registro: 02 Jul 2013 21:12
Cidade/Estado: sao paulo sp
Curtiu: 16 vezes
Mens.Curtidas: 0 vez

versao unicode ou ansi - o retorno

Mensagempor Toledo » 09 Ago 2013 21:05

Marcelo, no HMG foram criadas funções novas para tratamento ANSI/UNICODE:

 ANSI/UNICODE  ANSI 
 HMG_LEN()  LEN() 
 HMG_LOWER()  LOWER() 
 HMG_UPPER()  UPPER() 
 HMG_PADC()  PADC() 
 HMG_PADL()  PADL() 
 HMG_PADR()  PADR() 
 HMG_ISALPHA()  ISALPHA() 
 HMG_ISDIGIT()  ISDIGIT() 
 HMG_ISLOWER()  ISLOWER() 
 HMG_ISUPPER()  ISUPPER() 
 HMG_ISALPHANUMERIC()  RETURN (ISALPHA(c) .OR. ISDIGIT(c)) 
 HB_USUBSTR()  SUBSTR() 
 HB_ULEFT()  LEFT() 
 HB_URIGHT()  RIGHT() 
 HB_UAT()  AT() 
 HB_UTF8RAT()  RAT() 
 HB_UTF8STUFF()  STUFF() 


Obs.: as últimas funções iniciadas com HB_ são nativas do Harbour.

marcelosantos escreveu:haverá mudança na estrutura dos arquivos .dbf ?
ou alguma mudança importante ao dar um find ou seek no dbf ou ate mesmo um locate.


Acho que não foi feito nada sobre isto, mas é um ponto muito importante para se pensar.

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar de usuário

Toledo
Administrador

Administrador
 
Mensagens: 3038
Data de registro: 22 Jul 2003 18:39
Cidade/Estado: Araçatuba - SP
Curtiu: 263 vezes
Mens.Curtidas: 258 vezes

versao unicode ou ansi - o retorno

Mensagempor Jairo Maia » 11 Ago 2013 07:02

Olá Pessoal,

Muito interessante o questionamento. Vou também dar minha opinião:

Quanto ao FIND,este comando existe no Harbour apenas por compatibilidade, mas é obsoleto, e expressamente recomendado substitui-lo pelo SEEK.

Por sua vez, ao usar a codificação Unicode, embora ainda não há registro de problemas ao efetuar busca em bancos de dados em OEM ou Ansi, também é recomendado a reconstrução dos indices, pois eles serão criados no formato Unicod, compatibilizando a String de busca que será no formato Unicod.

Quanto ao LTrim(), RTrim(), AllTrim, nada muda, pois apenas retiram os espaços do inicio e fim das variáveis. Também nada muda nas funções de Datas e Numéricas.

Quanto a estrutura dos bancos de dados, para Unicode UTF-8 também não há problemas. Pelo que andei lendo, os bancos de dados terão que sofrer conversão apenas se for usar a codificação UTF-16 ou superior. Mas nada conclusivo ainda.

Já quanto ao Locate, a pergunta é interessante, uma vez que ele faz a busca literal nos dados do registro.

Observação:
A partir da versão 2.1 do Harbour, foi implementado o suporte ao Unicode UTF-8, e a partir da versão 3.0 foi possibilitado a compilação do Harbour em UTF-8 usando HB_BUILD_UNICODE=yes, que permite gerar os sistemas na codificação UTF-8. Como ainda não testei essa compilação, não entendo ainda se a DLL unicows.dll precisa acompanhar o executável somente para windows inferiores ao XP ou com qualquer um.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar de usuário

Jairo Maia
Colaborador

Colaborador
 
Mensagens: 2733
Data de registro: 16 Ago 2010 13:46
Cidade/Estado: Campinas-SP
Curtiu: 371 vezes
Mens.Curtidas: 305 vezes

versao unicode ou ansi - o retorno

Mensagempor marcelosantos » 12 Ago 2013 23:14

Jairo e Toledo, saudações

Na verdade mudou e muito.
Não foi pouca coisa não.
Vocês tiveram a oportunidade de olhar o help ?

O help do Hmg mostra que muita coisa mudou desde componentes grid até caixas de mensagem, passando pelas forma como os menus são definidos, e por ai vai.

Eu não vou migrar para Unicode agora não, não preciso por enquanto.

Porem estou com um problema engraçado voltei o projeto para a versão ANSI mas mesmo assim os caracteres acentuados continuma errados, já coloquei set language to portuguese e nada. nos forms que estou fazendo onde tem acento aparece com caracteres estranhos e não a letra em si.
Inclusive estou usando a IDE ANSI. Achei estranho. Vocês sabem o porque disso

Obrigado

abraços
marcelosantos
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 64
Data de registro: 02 Jul 2013 21:12
Cidade/Estado: sao paulo sp
Curtiu: 16 vezes
Mens.Curtidas: 0 vez

versao unicode ou ansi - o retorno

Mensagempor marcelosantos » 12 Ago 2013 23:22

Saudações

Outro questionamento que lembrei.

Nas próximas versões continuará existindo as versões ANSI e UNICODE ou teremos que aderir ao UNICODE a medida em que novas versões forem lançadas ?

abraços
marcelosantos
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 64
Data de registro: 02 Jul 2013 21:12
Cidade/Estado: sao paulo sp
Curtiu: 16 vezes
Mens.Curtidas: 0 vez

versao unicode ou ansi - o retorno

Mensagempor Jairo Maia » 13 Ago 2013 08:21

Olá Marcelo,

marcelosantos escreveu:Na verdade mudou e muito. Não foi pouca coisa não. Vocês tiveram a oportunidade de olhar o help ?
Na IDE a mudança foi Total. De tal forma que para você compilar um projeto na IDE Unicode, é necessário converter todos os seus arquivos PRGs em Ansi ou OEM para UTF-8, para que possa ser compilado corretamente. Caso não, a acentuação fica prejudicada.

marcelosantos escreveu:voltei o projeto para a versão ANSI mas mesmo assim os caracteres acentuados continuma errados
É possível que a codificação de seus arquivos tenham sido alteradas. Certifique-se que todos estejam codificados em Ansi que não haverá problemas. O Notepad++ permite você manusear a codificação com mais facilidade.

marcelosantos escreveu:Nas próximas versões continuará existindo as versões ANSI e UNICODE ou teremos que aderir ao UNICODE
Acredito que a versão Ansi será mantida enquanto houver interesse na comunidade. No fórum oficial, vejo que o interesse inclusive internacional é muito grande em continuar trabalhando com a versão em Ansi. A versão Unicode é opcional, de acordo com a necessidade de cada situação.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar de usuário

Jairo Maia
Colaborador

Colaborador
 
Mensagens: 2733
Data de registro: 16 Ago 2010 13:46
Cidade/Estado: Campinas-SP
Curtiu: 371 vezes
Mens.Curtidas: 305 vezes

versao unicode ou ansi - o retorno

Mensagempor Claudio Soto » 13 Ago 2013 12:34

Hola amigos.
Permitanme hacer algunas aclaraciones sobre HMG ANSI/Unicode, algunas son aclaraciones obvias y otras tal vez no tanto.

1) IDE:
- Para trabajar en ANSI obligatoriamente se debe utilizar el IDE ANSI
- Para trabajar en UNICODE obligatoriamente se debe utilizar el IDE UNICODE

2) Biblioteca HMG:

- ANSI
- Para trabajar en ANSI la biblioteca de HMG debe estar compilada con la opción ANSI (opción 1 del menu del BuildLib.bat)
- El editor de texto debe estar en ANSI
- El código de pagina debe ser el código ANSI correcto, SET CODEPAGE TO ANSIxxx (ej. SPANISH)

- UNICODE
- Para trabajar en UNICODE la biblioteca de HMG debe estar compilada con la opción UNICODE (opción por defecto del BuildLib.bat)
- El editor de texto debe estar en UTF-8 (Unicode)
- El código de pagina debe ser SET CODEPAGE TO UNICODE (opción por defecto en Unicode)

Hasta aquí todo es obvio, tal vez lo no tan obvio es que con la biblioteca compilada en UNICODE también se puede trabajar en ANSI:
- El editor de texto debe estar en ANSI
- El IDE debe ser el en ANSI
- El código de pagina debe ser el codigo ANSI correcto, SET CODEPAGE TO ANSIxxx (ej. SPANISH)
- Lo IMPORTANTE en es poner el SET CODEPAGE correcto (no confundir con el SET LANGUAGE) al inicio de la función Main()

En mi opinión la mejor opción para trabajar en ANSI es esta ultima:
- porque la biblioteca de HMG ha sido mas testeada con la compilación en Unicode
- se puede ejecutar ejemplos escritos para ambos sistemas
- se puede hacer aplicaciones híbridas, mitad ANSI, mitad Unicode (ej. utilizar caracteres que no están en la tabla ANSI, ej determinados símbolos matemáticos)

En realidad la versión HMG-Unicode es un proyecto híbrido, por ejemplo cuanto el CODEPAGE esta en ANSI, HMG muestra los mensajes y las entradas de teclado en ANSI, cuando esta en UNICODE lo hace en Unicode.

Saludos,
Claudio.

PS: Las aplicaciones en ANSI no tienen que ser abandonadas porque HMG-UNICODE compilado con la opción Unicode puede ejecutar sin problemas tanto aplicaciones ANSI puro, UNICODE puro o mezcla ANSI/UNICODE.
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
Avatar de usuário

Claudio Soto
Colaborador

Colaborador
 
Mensagens: 555
Data de registro: 27 Ago 2012 12:31
Cidade/Estado: Uruguay
Curtiu: 35 vezes
Mens.Curtidas: 166 vezes

versao unicode ou ansi - o retorno

Mensagempor marcelosantos » 13 Ago 2013 23:02

Obrigado, Toledo, Jairo e Claudio.

Ok, entendi as explicações(ainda que parcialmente), em fim optei pela versão ansi.
muito bem compilei o harbour para a versão ansi, beleza.
configurei o editor para trabalhar com ansi, beleza.

ao fazer um teste com a função upper(variável) com o componentes label, não da certo,
ele converte realmente para maiúsculo mas a fonte fica diferente na parte do acento, ela fica menor que as outras letras.

coisa chata, quero começar a codificar a parte de acesso a dados e estou rodando a uma semana com uma tela simples.
segue um pedaço do código que fiz para testar.

Por favor se puderem ajudar agradeço, para mim não tem logica esse tipo de erro.

obrigado

#include "hmg.ch"

FUNCTION Main
   Set Century On
   Set Date Britis
   SET DELETE ON
   
      set codepage to portuguese
      set language to portuguese
   
   DEFINE WINDOW principal ;
   at 0,0;
   WIDTH 800  ;
   HEIGHT 600 ;
   title "SISTEMA";
   MAIN;
       **************** MENU principal do sistema ******************************
        DEFINE MAIN MENU
            DEFINE POPUP "Cadastros"
            MENUITEM "Clientes"                 Action MSGINFO("Chamar form CLIENTES")
        END POPUP
        END MENU   
         
         // AQUI COMEÇA O PROBLEMA
         texto="acentuação ansi"
         texto=upper(texto)

         **  teste com @
         @ 600,150 label testa_ansi width 1400 height 60 value texto font "bold" size 30

            **  teste com define label
            DEFINE LABEL Label_1
                ROW    70
                COL    30
                WIDTH  1400
                HEIGHT 60
                VALUE upper("acentuação ANSI - São Paulo")
                FONTNAME "Arial"
                FONTSIZE 30
                TOOLTIP ""
                FONTBOLD .t.
                FONTITALIC .t.
                FONTUNDERLINE .F.
                FONTSTRIKEOUT .F.
                HELPID Nil
                VISIBLE .T.
                TRANSPARENT .F.
                ACTION Nil
                AUTOSIZE .F.
                BACKCOLOR NIL
                FONTCOLOR NIL
            END LABEL
   END WINDOW 
   principal.maximize
   activate window principal
   
RETURN
Nota de Moderação:
Toledo: Mensagem editada para colocar a tag [ code ]
Veja como utilizar esta tag: Clique aqui
marcelosantos
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 64
Data de registro: 02 Jul 2013 21:12
Cidade/Estado: sao paulo sp
Curtiu: 16 vezes
Mens.Curtidas: 0 vez

versao unicode ou ansi - o retorno

Mensagempor Jairo Maia » 14 Ago 2013 05:48

Olá Marcelo,

Confirmado! Fiz o teste na HMG 3.1.5 com seu fonte como está, e também mudando a função Upper() por Hmg_Upper(), e deu o mesmo problema.

E o mais curioso é que compilei seu exemplo com a versão 3.0.46 e também ocorreu o mesmo problema.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar de usuário

Jairo Maia
Colaborador

Colaborador
 
Mensagens: 2733
Data de registro: 16 Ago 2010 13:46
Cidade/Estado: Campinas-SP
Curtiu: 371 vezes
Mens.Curtidas: 305 vezes

versao unicode ou ansi - o retorno

Mensagempor Pablo César » 14 Ago 2013 09:19

Olá pessoal, apesar da minha profunda mágoa não consegui deixar de responder a este tópico que encontra-se com dificuldades sobre ANSI e UNICODE. Como já disse o nosso prezado amigo Dr. Soto, o importante é como setar o CODEPAGE e dependendo do padrão (UNICODE ou ANSI) e a versão da HMG que será utilizado.

Eu trabalho com HMG UNICODE e venho trabalhando muito bem com ele, só que eu não fico nos dois modos. Ou opto por ANSI ou por UNICODE, se bem que daria para trabalhar com os dois mas eu já acho que isso requer mais trabalho para diferenciar e tratar as strings para exibição.

1. Então, se você tem um sistema que já tinha sido feito antes da versão 3.1.x, isto é em ANSI. Você pode continuar utilizando em modo ANSI, mas também pode converter em modo UNICODE que é o atual modo default (vamos dizer assim) que a HMG lança suas últimas versões.

Então voltando ao tema de como trabalhar em ANSI com HMG, você tem ao menos dois caminhos:

      a. Utilize a versão HMG 3.0.46, que é a ultima versão em ANSI puro.

ou

      b. Utilize a ultima versão do HMG (até esta presente data, é 3.1.5), mas para isso você terá que refazer todas as bibliotecas dessa versão e passar a utilizar a IDE ANSI que está na pasta C:\hmg.3.1.5\IDE_ANSI. Para refazer as bibliotecas, basta executar o C:\hmg.3.1.5\BuildAllLib.bat.

Então fiz pequenas alterações no seu exemplo e anexei os arquivos para que pudesse comparar. Segue o exemplo na versão ANSI:
Demo_ansi.rar
(752.8 KiB) Baixado 132 vezes


2. Embora possamos ainda trabalhar em modo ANSI, eu como já disse, preferiria trabalhar sempre em modo UNICODE e se você já possuía o código em ANSI, para transformá-lo bastaria utilizar a versão UNICODE da HMG com a IDE (default, pasta: C:\hmg.3.1.5\IDE) e re-editar todos os seus prgs onde contiverem qualquer caracter ANSI, para isso basta re-digitar o texto mas no padrão UTF-8 e gravá-los. Depois é só compilar-los.

Segue o exemplo na versão UNICODE:
Demo_unicode.rar
(804.48 KiB) Baixado 130 vezes


A questão do banco de dados, deverão ser tratados conforme no padrão em que se encontram.

Bom espero ter esclarecido a vocês essa questão e se houverem falhas podem acessar ao fórum oficial da HMG e reportar o bug ou até mesmo esclarecer qualquer dúvida.
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.
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5312
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 152 vezes

versao unicode ou ansi - o retorno

Mensagempor marcelosantos » 14 Ago 2013 19:43

Jairo, obrigado.

Acho que o Pablo achou o problema :

usando isso resolveu:

request hb_codepage_ptiso

hb_cdpSelect("PTISO")

abraços

Marcelo
marcelosantos
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 64
Data de registro: 02 Jul 2013 21:12
Cidade/Estado: sao paulo sp
Curtiu: 16 vezes
Mens.Curtidas: 0 vez

versao unicode ou ansi - o retorno

Mensagempor marcelosantos » 14 Ago 2013 20:12

Pablo César escreveu:1. Então, se você tem um sistema que já tinha sido feito antes da versão 3.1.x, isto é em ANSI. Você pode continuar utilizando em modo ANSI, mas também pode converter em modo UNICODE que é o atual modo default (vamos dizer assim) que a HMG lança suas últimas versões.

ou

b. Utilize a ultima versão do HMG (até esta presente data, é 3.1.5), mas para isso você terá que refazer todas as bibliotecas dessa versão e passar a utilizar a IDE ANSI que está na pasta C:\hmg.3.1.5\IDE_ANSI. Para refazer as bibliotecas, basta executar o C:\hmg.3.1.5\BuildAllLib.bat.


No momento acho que para mim é a melhor opção. não posso perder tempo agora para tentar fazer em Unicode.

Pablo César escreveu:A questão do banco de dados, deverão ser tratados conforme no padrão em que se encontram.


Desculpe não entendi a sua colocação Pablo.

O que não ficou claro para mim ainda, não é a questão da visualização Unicode, até ai tudo "bem".
A minha maior preocupação é a manipulação dos dados(ler, gravar, alterar, pesquisar, visualizar relatórios, imprimir etc...) no que se refere à manipulação de strings. Ainda não entendi o impacto do Unicode nisso tudo. Não sei se sou só eu que estou com essa dificuldade ou tem mais gente, não sei se é por causa da idade(kkkkk), em outras linguagens que trabalhei esssa preocupação era transparente.

A principio como o Harbour é novo para mim estou tentando fazer um sistema em puro dbf por enquanto, mais para frente quero trocar para bancos como mysql, se for o caso.

Não sei se estou filosofando muito, não sei se estou cansando os membros e moderadores do fórum com esse tópico, em fim, agradeço a todos, só quero entender.

No aguardo.

Obrigado , Toledo, Jairo, Soto, Pablo e demais.
marcelosantos
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 64
Data de registro: 02 Jul 2013 21:12
Cidade/Estado: sao paulo sp
Curtiu: 16 vezes
Mens.Curtidas: 0 vez

versao unicode ou ansi - o retorno

Mensagempor marcelosantos » 16 Ago 2013 15:31

Saudações

Algo mais a considerar amigos?

se não tiver, considero encerrado
marcelosantos
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 64
Data de registro: 02 Jul 2013 21:12
Cidade/Estado: sao paulo sp
Curtiu: 16 vezes
Mens.Curtidas: 0 vez




Retornar para MiniGui

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 12 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro