Acentos no Linux - Harbour Console UTF-8, quase resolvido

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

yugi386
Usuário Nível 2
Usuário Nível 2
Mensagens: 82
Registrado em: 24 Jul 2008 10:36
Localização: Minas Gerais

Acentos no Linux - Harbour Console UTF-8, quase resolvido

Mensagem por yugi386 »

Saudações a todos!!!

Estou tentando fazer funcionar no Harbour 3.0 modo console a interface com acentos
no linux ubuntu 12.04. Mudei a codificação do terminal para UTF-8, usei o Gedit
para escrever o código no formato UTF-8. Os acentos aparecem sem problemas mas
nas telas de entradas de dados (GET) acontecem alguns problemas.

A codificação UTF-8 utiliza 1, 2, 3 ou até 4 bytes para representar um caracter.
Isto faz com que quando se digita um acento o sistema apresente alguns erros.

Nas telas a seguir vocês podem ver que se os caracteres acentuados são apresentados
através de @ say não há nenhum problema. Mas com o GET nós temos.

Além disto pelo fato da codificação UTF-8 usar mais de um byte para representar
determinados caracteres as funções substr(), len(), at(), rat() retornam dados incorretos.

Questões:

1. Existe uma classe GET preparada para ler UTF-8 no harbour em modo console?

2. Existem funções no harbour preparadas para substituir substr(), len(), at(), rat() e outras
correlatas compatíveis com UTF-8 em modo console?

3. Já tentei usar outras codificações no linux para tentar aceitar os acentos mas não deu certo.
Alguém já conseguiu usar outra codificação com sucesso? Em caso positivo qual e site seus passos.

Do jeito que está é possível criar a interface em modo console com todos os acentos, exceto nos GETS.
Uma saída seria vincular uma função na cláusula VALID do GET para permitir somente letras, números, espaços
e sinais aritméticos. Mas eu ainda não fico satisfeito desta forma...

Obrigado desde já por qualquer ajuda.

Um abraço a todos!!!

Código fonte:

Código: Selecionar todos

/**
---------------------------------------------------------------------------
Rotinas codificadas em Harbour 3.0.0 (Rev. 16951)
Problemas com GET no UBUNTU 12.04 LTS quando se usa a codificação UTF-8
Yugi386
---------------------------------------------------------------------------
*/

REQUEST HB_LANG_PT
REQUEST HB_CODEPAGE_UTF8

#define YLIB_CARAC_VALIDOS "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%&*()-_+={}[],.;<>:?/\| "

function main()

	ylib_iniciar()	// Configurações Iniciais

	do while .t.

		ylib_JanelaMain("H a r b o u r","W+/g","N/B","N/W,W+/R","N/W")

		opc :=	ylib_criaMenu(01,01,{{" Iniciar ","Iniciar"},{" Menu ","Menu de opções"},{" Sair ","Sair"}},"N/W,W+/R",1)

		Do case
			case opc = 3 .or. opc = 0
				exit

			case opc = 2

				menuVertical := {{"Clientes","Clientes"},{"Fornecedores","Fornecedores"},{"Movimento","Movimento"},;
						{"Nota Fiscal","Notas"}, {"Sair","Sair"}}

				opc := ylib_criaMenuVertical(02,11,menuVertical,"N/W,W+/R")

			case opc = 1

				// Informações dos campos: campo, tipo, tamanho, cabeçalho, mascara, edição, conteudo
				campos := { ;
						  {"Codigo","N",12,"Código","999999999999",.F.,1},;
						  {"Nome","C",50,"Nome","@s40 ",.t.,padr("",50," ")},;
						  {"CPF","C",12,"CPF","9999999999-9",.t.,padr("",11," ")},;
						  {"Data","D",10,"Data","",.t.,CtoD("01/01/2014")},;
						  {"Endereço","C",50,"Endereço","@s40 ",.t.,padr("",50," ")}	,;
						  {"Bairro","C",50,"Bairro","@s40 ",.t.,padr("",50," ")}	,;
						  {"Complemento","C",50,"Complemento","@s40 ",.t.,padr("",50," ")}	,;
						  {"Cidade","C",50,"Cidade","@s40 ",.t.,padr("",50," ")}	,;
						  {"Estado","C",2,"Estado","",.t.,padr("",2," ")} }
	
				do while.t.
					ret := ylib_formulario("Clientes",05,10,16,65,"W/g","N/W",1,campos,"N/W,W/R,,,N/BG")

					if ret == nil
						exit
					else 
						campos = aclone(ret)
						ret = ylib_ValidaString(campos[2][7])

						// rotinas de validação (???)
						if empty(ret)
							ylib_Msg("Aviso",09,30,14,60,"W/B","N/W",1,"Dados Corretos!!!")
							exit
						else
							ylib_Msg("Erro",09,20,14,62,"W/R","N/W",1,"O Sistema não aceita acentos!!!")
						endif
					endif

				enddo

				// cancelamento do cadastro
				if ret == nil
					ylib_Msg("Erro",07,20,12,50,"W/R","N/W",1,"Você cancelou o cadastro!!!")
				endif

		Endcase

	Enddo

close all
clear all
quit

return nil

/** 
--------------------------------------------------------------------------------------------------------------------
Descrição:
Configurações Iniciais Gerais do Sistema
Esta função seta várias configurações gerais do Sistema
Parâmetros:
Nenhum
--------------------------------------------------------------------------------------------------------------------
*/
function ylib_iniciar()

	HB_LANGSELECT( 'PT' )
	HB_CDPSELECT( "UTF8" )	

	set date french
	set century on
	set scoreboard off
	set cursor off
	setblink(.f.)
	set confirm on	
	setmode(25,80)
	set message to 24 center
	set wrap On

return nil

/** 
--------------------------------------------------------------------------------------------------------------------
Descrição:
Criar Janela Genérica com controle de cor, posição, cor do título e sombra com 4 posições
Parâmetros:
1. mTitulo....: Titulo da janela
2. l1.........: Linha inicial da janela
3. c1.........: Coluna inicial da janela
4. l2.........: Linha final da janela
5. c2.........: Coluna final da janela
6. corTitulo..: Cor do Título da janela (Frente e Fundo)
7. corJanela..: Cor da janela (Frente e Fundo)
8. tipoSombra.: pode ser 1, 2, 3, 4, respectivamente, sombra na posição inferior esquerdo, inferior direito, superior esquerdo e superior direito
--------------------------------------------------------------------------------------------------------------------
*/
function ylib_janela(mTitulo,l1,c1,l2,c2,corTitulo,corJanela,tipoSombra)

	if corTitulo == NIL
		corTitulo = "W/B"
	endif

	if corJanela == NIL
		corJanela = "N/W"
	endif

	// Posicionamento da sombra da Janela
	setcolor("N/N+")
	do case
		case tipoSombra == 1	// inferior esquerdo
			ylib_Sombra(l1+1,c1-1,l2+1,c2-1)
		case tipoSombra == 2	// inferior direito
			ylib_Sombra(l1+1,c1+1,l2+1,c2+1)
		case tipoSombra == 3	// superior esquerdo
			ylib_Sombra(l1-1,c1-1,l2-1,c2-1)
		case tipoSombra == 4	// superior direito
			ylib_Sombra(l1-1,c1+1,l2-1,c2+1)
		otherwise
			ylib_Sombra(l1+1,c1-1,l2+1,c2-1) // Padrão inferior esquerdo
	endcase

	// Posicionamento da Janela e Título
	setcolor(corJanela)		
	@ l1,c1 clear to l2,c2
	setcolor(corTitulo)		
	@ l1,c1 clear to l1,c2
	@ l1,c1+1 say mTitulo

return nil

/** 
--------------------------------------------------------------------------------------------------------------------
Descrição:
Construindo a Janela Principal do Programa
Parâmetros:
1. mTitulo.....: Título da tela principal do programa
2. CorTitulo...: Cor do título da janela (frente e fundo)
3. CorJanela...: Cor da Janela Principal do sistema
4. CorMenu.....: Cor do Menu principal do sistema
5. CorStatus...: Cor da barra de status do sistema (frente e fundo)
--------------------------------------------------------------------------------------------------------------------
*/
function ylib_JanelaMain(mTitulo,CorTitulo,CorJanela,CorMenu,CorStatus)

	if CorTitulo == nil
		CorTitulo = "W+/B"
	endif
	
	if CorJanela == nil
		CorJanela = "N/BG"
	endif

	if CorMenu = nil
		CorMenu = "N/W,W+/R"
	endif

	if CorStatus = nil
		CorStatus = "N/W,W+/R"
	endif

	setcolor(CorJanela)
	cls
	
	setcolor(CorTitulo)
	@ 00,00 clear to 00,79
	ylib_center(00,mTitulo,CorTitulo,80,0)

	setcolor(CorStatus)
	@ 24,00 clear to 24,79

	setcolor(CorMenu)
	@ 01,00 clear to 01,79

return nil

/**
--------------------------------------------------------------------------------------------------------------------
Descrição:
Centraliza mensagem na Tela em uma determinada linha ou em uma janela
Parâmetros:
1. linha.........: Linha em que a mensagem vai aparecer
2. mensagem......: Informação a ser apresentada
3. cor...........: Cor que a mensagem será apresentada (Frente e Fundo)
4. tamanhoLinha..: Define o tamanho da linha do sistema (padrão 80)
5. inicio........: Coluna inicial a ser considerada para a centralização da mensagem
--------------------------------------------------------------------------------------------------------------------
*/
function ylib_center(linha,mensagem,cor,tamanhoLinha,inicio)
	local lcor := setcolor(), posicao := 0

	if cor == nil
		cor = "N/W"
	endif

	if tamanhoLinha == nil
		tamanhoLinha = 80
	endif

	if inicio == nil
		iniciao = 0
	endif

	posicao = int((tamanhoLinha - len(alltrim(Mensagem))) / 2) + inicio

	setcolor(cor)	
	@linha,posicao say mensagem

	setcolor(lcor)

return nil

/** 
--------------------------------------------------------------------------------------------------------------------
Descrição:
Cria um Menu Horizontal
Parâmetros:
1. l1...........: Linha inicial do Menu
2. c1...........: Coluna inicial do Menu
3. opcoes.......: Matriz com opções e mensagens de status do Menu
4. corMenu......: Cor do menu padrão e selecionado
5. espacamento..: Espaçamento entre os menus
--------------------------------------------------------------------------------------------------------------------
*/
function ylib_criaMenu(l1,c1,opcoes,corMenu,espacamento)
	local tam := 0, ct:=0, opc:= 0

	if corMenu == nil
		corMenu = "N/W,W+/R"
	endif

	if espacamento == nil
		espacamento = 2
	endif

	tam:= len(opcoes)
	setcolor(corMenu)
	ylib_status(corMenu,24)

	for ct:= 1 to tam
		@ l1,c1 prompt opcoes[ct][1] message alltrim(opcoes[ct][2])
		c1 = c1 + len(opcoes[ct][1]) + espacamento
	next
	menu to opc

return opc
	
/** 
--------------------------------------------------------------------------------------------------------------------
Cria Um Formulário para Edição de Dados tipo Caracter, Numérico e Data
Parâmetros:
01. mTitulo....: Titulo do formulário
02. l1.........: Linha inicial da janela
03. c1.........: Coluna inicial da janela
04. l2.........: Linha final da janela
05. c2.........: Coluna final da janela
06. corTitulo..: Cor do Título da janela (Frente e Fundo)
07. corJanela..: Cor da janela (Frente e Fundo)
08. tipoSombra.: pode ser 1, 2, 3, 4, respectivamente, sombra na posição inferior esquerdo, inferior direito, superior esquerdo e superior direito
09. campos.....: Matriz com o nome do campo, tipo e tamanho
10. cor do get.: Cor do campo de leitura de variáveis
--------------------------------------------------------------------------------------------------------------------
*/
function ylib_formulario(mTitulo,l1,c1,l2,c2,corTitulo,corJanela,tipoSombra,campos,corGet,conteudo)
	local maxCabecalho := 0, ct:=0, tam:=0, wcampos := Array(len(campos)), tela

	set cursor On
	ylib_janela(mTitulo,l1,c1,l2,c2,corTitulo,corJanela,tipoSombra)

	tam := len(campos)
	for ct:= 1 to tam
		maxCabecalho := max(maxCabecalho,len(alltrim(campos[ct][4])))
	next	
	
	++maxcabecalho

	for ct:= 1 to tam
		if at(":",campos[ct][4]) == 0
			campos[ct][4] := alltrim(campos[ct][4]) + replicate(".",maxcabecalho-len(alltrim(campos[ct][4]))) + ":"
		endif
	next	
	
	l1 = l1+2

	for ct:= 1 to tam
		if campos[ct][7] == NIL
			do case
				case upper(campos[ct][2]) == "C"
					wcampos[ct] = space(campos[ct][3])
				case upper(campos[ct][2]) == "D"
					wcampos[ct]  = CtoD("  /  /    ")
				case upper(campos[ct][2]) == "N"
					wcampos[ct]  = 0
			endcase
		else
			wcampos[ct] = campos[ct][7]
		endif
	next

	setcolor(corGet)
	for ct:= 1 to tam
		if campos[ct][6]
			@ l1,c1+1 say campos[ct][4] get wcampos[ct] pict campos[ct][5]
		else
			@ l1,c1+1 say campos[ct][4] get wcampos[ct] pict campos[ct][5] WHEN .F.
		endif				
		++l1
	next
	read

	if lastkey() = 27	// se pressionar ESC o retorno é NIL
		return NIL
	else
		for ct:= 1 to tam	// preenchendo os campos de retorno
			campos[ct][7] = wcampos[ct]
		next
	endif

	set cursor off

return campos

/** 
--------------------------------------------------------------------------------------------------------------------
Tela Para Mensagem
Parâmetros:
01. mTitulo....: Titulo da Janela
02. l1.........: Linha inicial da janela
03. c1.........: Coluna inicial da janela
04. l2.........: Linha final da janela
05. c2.........: Coluna final da janela
06. corTitulo..: Cor do Título da janela (Frente e Fundo)
07. corJanela..: Cor da janela (Frente e Fundo)
08. tipoSombra.: pode ser 1, 2, 3, 4, respectivamente, sombra na posição inferior esquerdo, inferior direito, superior esquerdo e superior direito
09. Mensagem...: Mensagem de Erro
--------------------------------------------------------------------------------------------------------------------
*/
function ylib_Msg(mTitulo,l1,c1,l2,c2,corTitulo,corJanela,tipoSombra,mensagem)
	local tela

	save screen to tela

	set cursor off
	ylib_janela(mTitulo,l1,c1,l2,c2,corTitulo,corJanela,tipoSombra)
	setcolor(corJanela)
	keyboard chr(27)
	memoedit(mensagem,l1+2,c1+1,l2-1,c2-1,.F.) 
	setcolor(cortitulo)
    @ l2-1,c1 + int(((c2-c1+1)-6)/2) say "  OK  "
	inkey(0)

	restore screen from tela

return nil

/** 
--------------------------------------------------------------------------------------------------------------------
Validação de caracteres aceitáveis como entrada de dados
Parâmetros:
01. mEntrada...: Entrada de dados a ser validada (String)
--------------------------------------------------------------------------------------------------------------------
*/
function ylib_ValidaString(mEntrada)
local ret := "", ct:= 0
	
	for ct:= 1 to len(mEntrada)
		if !(substr(mEntrada,ct,1) $ YLIB_CARAC_VALIDOS)
			if at(substr(mEntrada,ct,1),ret) == 0
				ret += substr(mEntrada,ct,1) + ", "
			endif
		endif
		if len(mEntrada) == ct
			ret := substr(ret,1,len(ret)-2)
		endif
	next

return ret

/** 
--------------------------------------------------------------------------------------------------------------------
Sombra Real na tela
Parâmetros:
01. l1...: Linha inicial
02. c1...: Coluna Inicial
03. l2...: Linha final
04. c2...: Coluna final
---------------------------------------------------------------------------------------------------------------------
*/
function ylib_Sombra(l1,c1,l2,c2)
	local ret := "", ct:= 0, tela, coluna:=c1, linha:=l1, cor, tam:=0
	
	tela :=savescreen(l1,c1,l2,c2)
	
	cor := setcolor()
	setcolor("N+/N")
	tam := len(tela)

	for ct:= 1 to tam step 4
		@ linha,coluna say substr(tela,ct,1)
		++ coluna
		if coluna > c2
			coluna = c1
			++ linha
		endif

		if linha > l2
			exit
		endif

	next
	setcolor(cor)

return nil

/** 
--------------------------------------------------------------------------------------------------------------------
Descrição:
Cria um Menu Vertical
Parâmetros:
1. l1...........: Linha inicial do Menu
2. c1...........: Coluna inicial do Menu
3. opcoes.......: Matriz com opções e mensagens de status do Menu
4. corMenu......: Cor do menu padrão e selecionado
--------------------------------------------------------------------------------------------------------------------
*/
function ylib_criaMenuVertical(l1,c1,opcoes,corMenu)
	local tam := 0, ct:=0, opc:= 0, maxMenu:=0, l2, c2, contador:=1

	if corMenu == nil
		corMenu = "N/W,W+/R"
	endif

	// verificando o tamanho do Menu
	tam:= len(opcoes)

	for ct:= 1 to tam
		maxMenu = Max(maxMenu,len(alltrim(opcoes[ct][1])))
	next

	l2 = l1 + tam + 1
	c2 = c1 + 8 + maxMenu

	setcolor(corMenu)
	ylib_status(corMenu,24)
	ylib_Sombra(l1+1,c1-1,l2+1,c2-1)
	@ l1,c1 clear to l2,c2	
	@ l1,c1 to l2,c2	
	++l1

	for ct:= 1 to tam
		@ l1,c1+1 prompt alltrim(str(contador)) + ". " + padr(opcoes[ct][1],c2-c1-4," ") message alltrim(opcoes[ct][2])
		++contador
		++l1
	next
	menu to opc

return opc

/** 
--------------------------------------------------------------------------------------------------------------------
Descrição:
Limpa a Barra de Status
Parâmetros:
1. cor.........: Cor da barra de status
2. linha.......: linha
--------------------------------------------------------------------------------------------------------------------
*/
function ylib_status(cor,linha)

	setcolor(cor)
	@linha,00 clear to linha,79

return nil
Imagens das telas:

Imagem
Imagem
Imagem
Imagem
Imagem
Imagem
yugi386
Usuário Nível 2
Usuário Nível 2
Mensagens: 82
Registrado em: 24 Jul 2008 10:36
Localização: Minas Gerais

Acentos no Linux - Harbour Console UTF-8, quase resolvido

Mensagem por yugi386 »

Saudações a todos!!!

Nesta busca da solução em usar UTF8 no console com todos os acentos à disposição, inclusive e principalmente no GET, depois de bater cabeça pude decifrar o mistério:

Eu estava usando Harbour 3.0 e nele não existe os seguintes comandos:

Código: Selecionar todos

REQUEST HB_CODEPAGE_UTF8EX
hb_cdpSelect( "UTF8EX" )
Existe sim os comandos REQUEST HB_CODEPAGE_UTF8 e hb_cdpSelect( "UTF8" ) que infelizmente não fazem os acentos funcionar corretamente.

Aí compilei o Harbour 3.4.0 e utilizando o seguinte código tive o resultado esperado:

Código: Selecionar todos

REQUEST HB_LANG_PT
HB_LANGSELECT( 'PT' )
REQUEST HB_CODEPAGE_UTF8EX
hb_cdpSelect( "UTF8EX" )
Para complementar o post gostaria de citar os passos que fiz para compilar o Harbour no Ubuntu 12.04 LTS:

1. Baixei o pacote no link: https://github.com/harbour/core/archive/master.zip

2. Extrai o pacote na minha pasta pessoal sem alterar seu nome

3. Abri o terminal

4. Digitei cd harbour-core-master

5. Digitei make

6. Após o término do processo para usar o harbour de qualquer diretório do linux copiei os seguintes arquivos:
a) Copiar harbour-core-master/bin/linux/gcc para /usr/bin
b) Copiar harbour-core-master/lib/linux/gcc para /usr/lib/harbour
c) Copiar harbour-core-master/include para /usr/include/harbour
OBS: para copiar arquivos para a pasta /usr você precisa estar como root. Para isto digite gksudo nautilus e em seguida a senha do root.

7. Fechei o terminal. Abri novamente. Compilei com hbmk2 incluindo a diretiva -static.
OBS: ao digitar harbour ou hbmk2 no terminal você verá a versão 3.4.0

Assim o problema de acentos no terminal linux utilizando UTF-8 ficou resolvido.

Obrigado a todos os que leram este post e espero que esta resposta possa lhes ser útil.

[]s

Yugi386
yugi386
Usuário Nível 2
Usuário Nível 2
Mensagens: 82
Registrado em: 24 Jul 2008 10:36
Localização: Minas Gerais

Acentos no Linux - Harbour Console UTF-8, quase resolvido

Mensagem por yugi386 »

Substitua os passos 5 e 6 por: sudo make install

yugi386
Avatar do usuário
zazibr
Usuário Nível 2
Usuário Nível 2
Mensagens: 72
Registrado em: 11 Set 2004 17:07
Localização: Campo Grande/MS

Acentos no Linux - Harbour Console UTF-8, quase resolvido

Mensagem por zazibr »

parabens

eu recomendaria fazer algum teste com a GUI que esta com muitas atualizações e ver se ela funciona no linux o QT como dizem que funciona por ser multiplataforma
Valdir
Usuário Nível 1
Usuário Nível 1
Mensagens: 9
Registrado em: 02 Abr 2021 18:26
Localização: Curitiba

Acentos no Linux - Harbour Console UTF-8, quase resolvido

Mensagem por Valdir »

Olá Yugi.
Há cerca de dois meses iniciei um teste com o Harbour 3.4.0 compilando programas Clipper em uma máquina com Linux Cinnamon e estou com o mesmo problema de acentuação nos gets: os menus aprecem acentuados, mas os gets não.
Percebi que o problema acontece quando uso REQUEST HB_GT_XWC e REQUEST HB_GT_XWC_DEFAULT.
Se retiro essas linhas do programa a centuação volta ao normal inclusive nos gets, mas a tela desconfigura. Tentei usar os passos que vc indicou, mas não tive sucesso. Já se passaram muitos anos desde sua postagem, mas como para mim é novo, gostaria de saber se conhecem outra alternativa.

Grato,
Valdir
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Acentos no Linux - Harbour Console UTF-8, quase resolvido

Mensagem por Itamar M. Lins Jr. »

Olá!
Bem vindo ao forum!
Coloque seu exemplo demonstrando o problema.
Esse do Yugi está ok.
Screenshot_20210418_172801.png
Screenshot_20210418_172801.png (10.96 KiB) Exibido 2097 vezes
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Valdir
Usuário Nível 1
Usuário Nível 1
Mensagens: 9
Registrado em: 02 Abr 2021 18:26
Localização: Curitiba

Acentos no Linux - Harbour Console UTF-8, quase resolvido

Mensagem por Valdir »

Olá e obrigado pelo retorno.
Desculpe, mas não consegui anexar as imagens aqui, então anexei o arquivo descrevendo o problema.
Anexos
Harbour Forum - Acentuação.doc
Arquivo com o passo a passo e as imagens das telas.
(99.5 KiB) Baixado 80 vezes
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Acentos no Linux - Harbour Console UTF-8, quase resolvido

Mensagem por Itamar M. Lins Jr. »

Olá!

Código: Selecionar todos

hbmk2 -lhbct -lxhb -lhbtip -gui -gtxwc -static LMSL.prg
Recentemente, conversamos sobre esse assunto UTF8 x ANSI.
Tem dois pontos na sua abordagem.
1) O FONTE do seu sistema está em UTF8 ? Parece que não está.
2) Está usando -gui e -gtxwc sem necessidade. Sua aplicação não faz uso disso. Tem alguma coisa do XWC ? alguma coisa gráfica ? Na suas telas eu não vi.
Como vc não mostrou seu código de teste, penso que basta converter seu fonte para UTF8.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Acentos no Linux - Harbour Console UTF-8, quase resolvido

Mensagem por Itamar M. Lins Jr. »

Olá!
Outra coisa.
Screenshot_20210419_164642.png
Isso ai é normal, é assim mesmo.

Se não deseja o menu do terminal, vc configura para tela inteira, o terminal seu ai que não sei qual é.
Aqui no meu é o tal de "konsole", nele vc configura centenas de coisas, inclusive "tela cheia".
Screenshot_20210419_164150.png
Outro detalhe PTISO(ANSI, ISO85xxx) funciona parcial, pq no LINUX o padrão é UTF8 conforme vc colocou ai.
Então tem:
a)UTF8 do Linux.
b)Seu fonte está em ANSI(PTISO), mostra os acentos mas não é UTF8. e o Linux(terminal) está em UTF8.
c)O menu do terminal vc pode ocultar.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Acentos no Linux - Harbour Console UTF-8, quase resolvido

Mensagem por Itamar M. Lins Jr. »

Olá!
Esse do Yugi estava quase certo.

Código: Selecionar todos

REQUEST HB_LANG_PT
REQUEST HB_CODEPAGE_UTF8EX
Function Main
   HB_LANGSELECT( 'PT' )
   HB_CDPSELECT( "UTF8EX" )   
...
Basta só isso ai.
E converter seus fontes para UTF8
Tem que usar esse "EX" no UTF8, senão não vai acentuar.
Screenshot_20210419_191142.png
Veja que nesse screenshot eu removi o menu, e estou chamando o programa com o terminal alterado, já com icone no desktop.
Aumentei a fonte e removi a barra de menu.
Screenshot_20210419_192027.png

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Valdir
Usuário Nível 1
Usuário Nível 1
Mensagens: 9
Registrado em: 02 Abr 2021 18:26
Localização: Curitiba

Acentos no Linux - Harbour Console UTF-8, quase resolvido

Mensagem por Valdir »

Olá.

Realmente os fontes não estavam em UTF8.
Sobre o -gtxwc, não utilizo interface gráfica, mas precisei dele para habilitar as funções abaixo e com elas e o -gtxwc não é ṕreciso fazer a trataiva do menu do terminal.
HB_GtInfo(HB_GTI_RESIZABLE,.f.) // .f. Inibe o botão maximizar
HB_Gtinfo(HB_GTI_CLOSABLE,.F.) // .f. Inibe "X" de fechar a janela

De qualquer forma, entendi mesmo que o problema está no uso do -gtxwc porque sem ele, mesmo com o fontes em ISO-8859-1 ou "PTISO" a acentuação funciona nos menus e nos gets compilando no Linux.
Para informação, compilei o mesmo sistema com Harbour 3.0 no Windows 10 e também funcionou com PTISO.
Então vou avaliar qual o melhor caminho a seguir.

De qualquer forma, agradeço pela sua ajuda e esclarecimentos e pela velocidade nas respostas.

Obrigado novamente,
Valdir
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Acentos no Linux - Harbour Console UTF-8, quase resolvido

Mensagem por Itamar M. Lins Jr. »

Olá!
Coloquei um questionamento no forum Harbour user, vamos ver o que eles vão dizer.
Acredito que é um BUG no GET quando usamos UTF8EX.
https://groups.google.com/g/harbour-users/c/OIrs1vPao7A

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Valdir
Usuário Nível 1
Usuário Nível 1
Mensagens: 9
Registrado em: 02 Abr 2021 18:26
Localização: Curitiba

Acentos no Linux - Harbour Console UTF-8, quase resolvido

Mensagem por Valdir »

Olá,

Também acho que possa ser um bug.
Estou acompanhando lá.

Valeu!
Valdir
Valdir
Usuário Nível 1
Usuário Nível 1
Mensagens: 9
Registrado em: 02 Abr 2021 18:26
Localização: Curitiba

Acentos no Linux - Harbour Console UTF-8, quase resolvido

Mensagem por Valdir »

Olá Itamar,

Tenho acompanhado no link que vc passou e vi que não houve resposta no grupo.
Fiz um teste utilizando seu programa e alternado o fonte (.prg) para ISO-8859-15 que é o que utilizo também para o Windows e funciona.
A diferença do programa em windows é que utilizo REQUEST HB_GT_WVT_DEFAULT e no Linux REQUEST HB_GT_XWC_DEFAULT.
E o problema pode estar aí, porque se compilo sem o -gtxwc o programa funciona, mas os acentos continuam não funcionando.

//testxwc2.prg

REQUEST HB_GT_XWC_DEFAULT
REQUEST HB_GT_XWC
REQUEST HB_CODEPAGE_PTISO
Function Main
cString := space(20)
HB_LANGSELECT( 'PT' )
HB_CDPSELECT( "PTISO" )

@ 1,1 say "ÃÉÍÓÚ - Ç纪"
@ 2,1 get cString //Type any character with acent letters, but not show ;-(
read

Return Nil //End of prg

$ hbmk2 testxwc2.prg
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Acentos no Linux - Harbour Console UTF-8, quase resolvido

Mensagem por JoséQuintas »

E se usar apenas -gui, sem indicar mais nada, não dá certo?
Ou depende do ambiente?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder