Página 2 de 2

Como posso identificar a codificação do arquivo?

Enviado: 28 Out 2012 21:39
por lugab
Ronaldo, esse tpc trata de mais de um assunto, então, me diz, p.fv, pra q serve essa função..

Código: Selecionar todos

hb_cdpIsUTF8( Memoread( cFile ) )
Não tenho tanto conhecimento assim, pra identificar o q ela faz pelo título...

Como posso identificar a codificação do arquivo?

Enviado: 29 Out 2012 00:11
por Imatech
Olá Gabriel !


Não fiz nenhum teste, mas acredito que tambem funcione para identificar arquivos que foram salvos como formato unicode...


O real objetivo da função é informar ao Harbour se determinado código de páginação esta no formato UTF8



Sucesso...

Como posso identificar a codificação do arquivo?

Enviado: 30 Out 2012 14:27
por Jairo Maia
Olá Ronaldo,

Para registro,

Tentei usar a função Hb_cdpIsUTF8( cString ) com a finalidade de identificar o formato da string, mas não dá certo. A finalidade dela é exclusivamente informar o Harbour no ponto que ela for chamada (True ou False), se o Harbour está com codificação UTF-8.

Sua sintaxe é

Código: Selecionar todos

Hb_cdpIsUTF8( cCodePageID )

Como posso identificar a codificação do arquivo?

Enviado: 30 Out 2012 14:37
por Imatech
Olá Jairo !

Agradecido pelos testes e informação... :)Pos

Conclusão: Hb_cdpIsUTF8(...) não serve para identificar códificação de arquivos texto ( .txt, .prn, etc )

Sucesso...

Como posso identificar a codificação do arquivo?

Enviado: 30 Out 2012 14:53
por Jairo Maia
Olá Pablo,
Pablo César - Em 27 Out 2012 escreveu:Entendi nada ! Nem da causa do seu riso nem a explicação.
Com toda Razão! Somente no domingo percebi quanta "bobagem" falei, e que quem não tinha entendido a mensagem era eu. Fiz tamanha confusão, que nem de lapso posso chamar, acho que foi uma parada cardíaca mesmo. Não atentei naquele momento o que você dizia. Como não tem emoticon de alguém enfiando uma lata de lixo na cabeça, vai este mesmo:
:%

Mas voltando ao assunto, comecei a tentar encontrar algum critério que pudesse diferenciar os formatos do texto, e acabei chegando numa situação que "aparentemente" parece que funciona, mas obviamente ainda requer mais testes. Com testes que fiz com vários textos funcionou. Veja:
Clipboard.jpg
Note que o último bloco nega todas as codificações, isto deve ser compreendido que o texto checado não continha caracteres especiais.

Usando seu exemplo, montei esta situação com HMG 3.0.44, Se desejar fazer alguns testes, o código está abaixo:

Código: Selecionar todos

#include <hmg.ch>

REQUEST HB_CODEPAGE_PTISO
REQUEST HB_CODEPAGE_PT850

Function Main()
Local aText:={}, cMsg:="", i //, crlf:=Chr( 13) + Chr( 10 )

SET LANGUAGE TO PORTUGUESE
SET CODEPAGE TO PORTUGUESE

Aadd(aText,"ANSI - Relatório de comissões no mês de [?]")
Aadd(aText,"OEM - Relat¢rio de comissäes no mˆs de [?]")
Aadd(aText,"UTF-8 - Relatório de comissΣes no mês de [?]")
Aadd(aText,"FREE - Relatorio de comissoes no mes de [?]")

For i=1 to 4

    If IsAnsi(aText[i])
       cMsg:=cMsg+"É ANSI: "+aText[i]+CRLF
    Else
      cMsg:=cMsg+"NÃO é ANSI: "+aText[i]+CRLF
    Endif
    
   If IsOem(aText[i])
       cMsg:=cMsg+"É OEM: "+aText[i]+CRLF
   Else
      cMsg:=cMsg+"NÃO é OEM: "+aText[i]+CRLF
    Endif
   
    If IsUtf8(aText[i])
       cMsg:=cMsg+"É UTF-8: "+aText[i]+CRLF
   Else
      cMsg:=cMsg+"NÃO é UTF-8: "+aText[i]+CRLF
    Endif
   
   cMsg:=cMsg+CRLF
   
 Next
 MsgInfo(cMsg)
Return

FuncTion IsUtf8( cString )

   Local i, cIdUtf := Chr( 195 )

   Local aUtf  := { 129, 130, 131, 132, 135, 137, 138, 141, 147, 148, ;
                    149, 150, 154, 156, 160, 161, 163, 162, 164, 167, ;
                    169, 170, 173, 179, 180, 181, 182, 186, 188 }

   For i = 1 To Len( aUtf )
    If At( cIdUtf + Chr( aUtf[ i ] ), cString ) > 0
     Return ( .T. )
    Endi
   Next

Return ( .F. )


Function IsAnsi( cString )

   Local i, aAnsi := { 196, 193, 194, 195, 201, 202, 205, 211, 212, 213, ;
                       218, 220, 225, 227, 231, 234, 237, 243, 244, 245, ;
                       246, 250, 252 }

   For i = 1 To Len( aAnsi )
    If At( Chr( aAnsi[ i ] ), cString ) > 0 .And. !IsUtf8( cString )
     Return ( .T. )
    Endi
   Next

Return ( .F. )

Function IsOem( cString )
      
   Local i, aOem  := { 128, 129, 130, 131, 132, 133, 135, 136, 142, 144, ;
                       147, 148, 153, 154, 160, 161, 162, 163, 181, 182, ;
                       198, 229, 210 }

   For i = 1 To Len( aOem )
    If At( Chr( aOem[ i ] ), cString ) > 0 .And. !IsUtf8( cString )
     Return ( .T. )
    Endi
   Next

Return ( .F. )

Como posso identificar a codificação do arquivo?

Enviado: 30 Out 2012 21:10
por Pablo César
kkkk agora você me fez rir Jairo. Mas vindo de você amigo... tem muito crédito comigo. Pois a humildade lamentavelmente vem de muitos poucos e você faz parte desso percentual, porque você é uma grande pessoa, muito grande.

Quanto o seu código, ficou chóia-da-Alemanha ! Excelente ! Ficou mais abrangente e bem mais entendível por substituir as funções em C. Sobre o quarto elemento aText e o seu resultado, não está errado também e não creio que isso tenha jeito. No entanto é muito raro um texto sem acentuação e sem C cedilhas.

Parabéns Jairo ! Valeu ! Agora sim, ficou bem melhor.