Dúvida sobre o comando LEN

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

Moderador: Moderadores

Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

Dúvida sobre o comando LEN

Mensagem por Vlademiro »

Pessoal, deve ser por causa do UTF-8, mas os valores abaixo da função LEN divergem.

Código: Selecionar todos

HB_CDPSELECT( "UTF8EX" )
function main()


? len("MAURÍCIO")  // Retorna 9
? len("MAURICIO") // Retorna 8

return
Não existe uma forma de retornar 8 para ambos os casos ?

Valeu! :xau
Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

Dúvida sobre o comando LEN

Mensagem por Vlademiro »

Só acrescentando que aqui no fórum já postei sobre UTF-8 e consegui solucionar graçar a vcs.

Link > https://pctoledo.org/forum/viewto ... =4&t=13250

Porém, esse agora não está dando certo. Acho que o comando LEN não :? funciona com UTF-8.
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Dúvida sobre o comando LEN

Mensagem por Jairo Maia »

Olá Vlademiro,

Primeiro, mesmo que você remover a chamada HB_CDPSELECT( "UTF8EX" ) nada muda. Uma string acentuada com codificação UTF-8, será retornado um byte a mais para cada acento contido nela.

A função que retornaria o tamanho correto de uma string com caracteres especiais (acentos ou cedilha) formatada em UTF-8 seria: Hb_ULen( cString ), mas se não estou enganado, ela só fará parte do Harbour se você compilar o Harbour em UTF-8.

Se você não usa o Harbour em UTF-8, você precisa converter a string para OEM ou ANSI e usar a função Len():

Código: Selecionar todos

Function Main()

  ? len( "MAURICIO" )               // Retorna 8
  ? Len( Hb_UTF8TOSTR( "MAURÍCIO" ) )    // Retorna 8

  // o inverso seria Hb_STRTOUTF8( cString )

return
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 do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

Dúvida sobre o comando LEN

Mensagem por Vlademiro »

:D
Jairo, vc é o cara!

Realmente a função hb_Ulen funcionou!

Pena que não resolveu o meu problema. É que eu estou tentando aproveitar os relatórios gerados pelo MIRO gerador de sistemas e está aparecendo assim :

Nome Valor
MAURICIO (10 espaços em branco) 10,00 << aqui não perde pois não tem acento.
MAURÍCIO (09 espaços em brando) 10,00 << Quando coloco acentos perde uma espaço a esquerda.



Se forem dois acentos perde dois espaços, e assim sucessivamente.

abcáé 10,00 << perde dois espaços pois tem dois caracteres acentuados.

Mistério... :-O

Achava que era o retorno do tamanho do campo, mas já substituí em todo o fonte do relatório sem sucesso.

Vou tentar mais um pouco.

Obrigado!
Responder