Página 1 de 1

Dúvida sobre o comando LEN

Enviado: 10 Mai 2013 11:56
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

Dúvida sobre o comando LEN

Enviado: 10 Mai 2013 13:25
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.

Dúvida sobre o comando LEN

Enviado: 10 Mai 2013 15:50
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

Dúvida sobre o comando LEN

Enviado: 10 Mai 2013 17:22
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!