Página 2 de 2

UTF-8

Enviado: 24 Set 2019 13:22
por Itamar M. Lins Jr.
Ola!
Seu teste.

Código: Selecionar todos

PROCEDURE Main

   LOCAL cTexto := ""
   set(_SET_CODEPAGE,"UTF8")

   ? cTexto := "éééééééééééé"
   ? Len( cTexto )
   ? hb_StrToUTF8( cTexto )
   ? Len( hb_StrToUTF8( cTexto ) )
   Inkey(0)

   RETURN
Saudações,
Itamar M. Lins Jr.

UTF-8

Enviado: 24 Set 2019 17:25
por JoséQuintas
Pelo que entendi, alterou e salvou pelo bloco de notas.
Teria que avaliar o arquivo fonte também.

O Unicode representa milhares de caracteres, então à primeira vista não seria possível com 8 bits.
Mas isso confunde o próprio UTF8.

UTF-8

Enviado: 24 Set 2019 17:32
por JoséQuintas
utf8.png
O arquivo criado como UTF-8 no PN, alterado pelo Bloco de Notas, e criado pelo Bloco de Notas.
Windows 10 - não sei se faz diferença - parece que o bloco de notas e até o console mudaram nele.
De visível, o indicativo de UTF-8 no início do arquivo.

UTF-8

Enviado: 24 Set 2019 17:45
por JoséQuintas
Teste novamente, e olhe o arquivo do bloco de notas, talvez no W7 altere pra ANSI.
utf8.png

UTF-8

Enviado: 24 Set 2019 17:50
por JoséQuintas
Lembrei que meu servidor é W7.
Sinto muito informar, mas NÃO é UTF8.
O Bloco de notas do W7 é ANSI.
utf8.png

UTF-8

Enviado: 24 Set 2019 21:21
por asimoes
Um bom teste é criar um fonte com utf-8 e outro sem

compila os 2 e verifica o tamanho final do exe de cada um

UTF-8

Enviado: 06 Out 2019 19:45
por JoséQuintas
hazael escreveu:Por exemplo, em um browse(), ou para desenhar uma box mas sem usar dispbox(), por exemplo...
Não entendi.
O Harbour faz o que tem que fazer.
@ 1, 0 TO 10, 10 e pronto.
Ou o Chr() no browse()

Ou só no 3.4 com GTWVG é que faz certo?

UTF-8

Enviado: 07 Out 2019 08:15
por JoséQuintas
test.png
Ou... pra não obrigar muita coordenada

Código: Selecionar todos

#command @ <x>, <y> BOX <char>  => @ <x>, <y>, <x>, <y> BOX <char>

   @ 01, 10 BOX CHR(200)
   @ 3, 10, 10, 40 BOX B_DOUBLE + Space(1)

UTF-8

Enviado: 07 Out 2019 16:40
por JoséQuintas
É que citou o tbrowse.
No tbrowse é automático.
No resto... de certa forma podemos considerar programação antiga, do tempo do DOS, não compatível com uso de codepage.

UTF-8

Enviado: 07 Out 2019 18:24
por JoséQuintas
hazael escreveu:Eu estava gravando cm UTF8 pois me parece que o padrão dos fontes do Harbour são em UTF8 também, a menos que eu estaja enganado sobre isso.
Até hoje acho isso confuso, não sei se salvando em UTF-8 tudo vai funcionar direito.
Uma coisa é tela, outra coisa é informação gravada em banco de dados.

Como já percebeu, há muitos conflitos em tela, imagine começar a acontecer isso em banco de dados.
Vou deixando isso de UTF-8 pra depois.
Por enquanto há outras prioridades mais importantes.

UTF-8

Enviado: 08 Out 2019 14:37
por JoséQuintas
hazael escreveu: * BANCO DE DADOS
* CODIGO FONTE
* TELA
Aí que está.... é mais que isso.

Supondo que crie um TXT pra enviar pro banco, ele não se encaixa em nenhuma dessas categorias.
Ou... se encaixar no código fonte.... vai arquivo TXT errado pro banco.
E não só banco... qualquer integração em TXT.

Ou seja... voltamos à estaca zero sobre UTF-8/fonte

UTF-8

Enviado: 08 Out 2019 17:15
por Itamar M. Lins Jr.
Ola!
Não tem dificuldade, apenas precisamos saber em que CP o texto foi criado.

Código: Selecionar todos

REQUEST HB_LANG_PT, HB_CODEPAGE_PTISO, HB_CODEPAGE_PT850

PROCEDURE Main

   LOCAL cTexto := ""
   set(_SET_CODEPAGE,"PTISO")
   ? cTexto := "MAÇÃ"
   set(_SET_CODEPAGE,"CP437")
   ? cTexto
   set(_SET_CODEPAGE,"UTF8")
   ? cTexto 
   set(_SET_CODEPAGE,"CP850")
   ? cTexto 
   Inkey(0)

   RETURN
Precisamos, se assim desejar converter as letras de origem, para a CP destino. As telas é a mesma coisa até na impressora é assim.
UTF8 é apenas uma PICTURE com mais opções. E tem o UTF8EX(extendido)

Código: Selecionar todos

...
oPrn:CharSet(WIN_OEM_CHARSET) //oPrn:CharSet(255)
...
HB_CDPSelect("PT850")
...
If lMatricial
  oPrn:TextoutAt(nCol,,'*---------------------------------------+----------------------------------*',.t.)
  oPrn:TextoutAt(nCol,,'|    F A T U R A  /  D U P L I C A T A  |Para Uso da Instituicao Financeira|',.t.)
  oPrn:TextoutAt(nCol,,'|-----------+------+----------+---------|                                  |',.t.)
...
Else
  oPrn:SetPos(nCol)

  oPrn:TextoutAt(nCol,,'ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»',.t.)
  oPrn:TextoutAt(nCol,,'º    F A T U R A  /  D U P L I C A T A  ºPara Uso da Instituicao Financeiraº',.t.)
  oPrn:TextoutAt(nCol,,'ÌÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÍ͹                                  º',.t.)
Imprime as linhas duplas as mesmas do clipper, na impressora.

Saudações,
Itamar M. Lins Jr.

UTF-8

Enviado: 19 Jan 2020 12:13
por Itamar M. Lins Jr.
Ola!
Apanhado aqui com UTF8.
Estou trabalhando com HTML e codificação 100% UTF8 inclusive no Harbour DBF.
Achei um problema com a função pad(), pq ela ler errado string UTF8, "çáé" no PAD() já conta 6 e é 3!, já o AllTrim() que corta os espaços funciona.
Como solução, fiz da seguinte forma.

Código: Selecionar todos

cCliente := "çáé" //String UTF8 do HTML/Apache pad(cCliente,60) ler que tem 6 characteres e acrencenta o resto para completar 60, só que são 3 não seis.
nTam := 60 - hb_utf8len(alltrim(cCliente)) //3
cCliente :=  alltrim(cCliente) + space(nTam)
Na criação do DBF usei {"cliente","C",60,0}, o dbseek falha do campo indexado "index on cliente tag ..." pq vem sem os espaços a string "çáé".
Estava usando cCliente := pad(cCliente,60) e o dbseek não achava... Demorei aqui procurando o BO... Já estava desistindo e trocando para ISO8... e CP PTISO no DBF, mas consegui entender o problema e resolver.

Saudações,
Itamar M. Lins Jr.

UTF-8

Enviado: 20 Jan 2020 09:45
por Itamar M. Lins Jr.
Ola!
O Maurizio me passou a solução.
Temos as funções hb_UPadR,hb_UPadL,hb_UPadC, esse U ai é UTF8!

Código: Selecionar todos

2015-07-27 16:36 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
  * src/rtl/chruni.c
    * added new functions hb_BStuff() and hb_UStuff()

  * src/rtl/Makefile
  - src/rtl/padc.c
  - src/rtl/padl.c
  - src/rtl/padr.c
  + src/rtl/padx.c
    * added new functions hb_BPadL(), hb_BPadR(), hb_BPadC(),
      hb_UPadL(), hb_UPadR() and hb_UPadC()

  * include/harbour.hbx
    * updated

  * src/rtl/memoedit.prg
  * src/rtl/teditor.prg
    * use hb_U*() functions for string manipulation - now it works
      correctly with mulitbyte encodings even if HVM CP does enabled
      character indexing, i.e. "UTF8"
Saudações,
Itamar M. Lins Jr.