Página 1 de 1

Significado daqueles 3 bytes iniciais, após Open() da HBTIP

Enviado: 28 Fev 2020 00:36
por Luizccr
Quando chamo o método Read(), logo após um Open() da classe TIPClientHttp(), recebo uma string JSON vinda de uma página em PHP. Porém, notei que ocorre de vir, junto, três bytes de caracteres estranhos que precedem os dados desejados.
Quando chamo o mesmo método Read(), após um Post(), por exemplo, esse problema não ocorre.
Estou usando exemplos da HBTip que acompanham o Harbour 3.2, para tentar consumir uma API REST desenvolvida em PHP. A solução que encontrei para o problema foi suprimir esses três bytes iniciais, invocando a função substr(). Mas, gostaria de entender melhor a causa. Talvez, eu não esteja sabendo utilizar o método de forma correta.
Trecho de exemplo de meu código onde o problema acontece:

Código: Selecionar todos

    oHTTP := TIPClientHttp():new( oURL ) 
    oHTTP:setCookie(cSessaoAtiva)
    oHTTP:hFields := hAuthBearer
    if oHTTP:Open()
        cJSON := oHttp:read()
        cJSON := substr(cJSON,4) // Remove 3 bytes estranhos que aparecem 
                                // no início da string, quando lida logo
                                // depois do método Open().
        cSessaoAtiva := oHTTP:getcookies()
    else
        ? "Etapa #1 Error:", "oHTTP:Open()", oHTTP:lastErrorMessage()
    endif
Neste outro trecho, por exemplo, não tem problema algum:

Código: Selecionar todos

            oHTTP := TIPClientHttp():new( oURL )
            oHTTP:setCookie(cSessaoAtiva)        
            IF oHTTP:Open()
                IF oHTTP:Post( hb_jsonEncode( hLogin ) )
                    cJSON := oHttp:read()
                    ? oHTTP:getcookies()
                ELSE
                    ? "Etapa #2 Error:", "oHTTP:Post()", oHTTP:lastErrorMessage()
                ENDIF    
                oHTTP:Close()
            ELSE
                ? "Etapa #2 Error:", "oHTTP:Open()", oHTTP:lastErrorMessage()
            ENDIF

Significado daqueles 3 bytes iniciais, após Open() da HBTIP

Enviado: 28 Fev 2020 14:07
por Luizccr
Acho que o problema está na API. Pois, alterei o URL do segundo código, no método Post(), deixando o mesmo que no primeiro código, e aconteceu o mesmo problema.

Significado daqueles 3 bytes iniciais, após Open() da HBTIP

Enviado: 03 Mar 2020 08:12
por sygecom
Já tentou converter para UTF8

hb_UTF8ToStr()
hb_StrToUTF8()

Significado daqueles 3 bytes iniciais, após Open() da HBTIP

Enviado: 03 Mar 2020 11:31
por JoséQuintas

Significado daqueles 3 bytes iniciais, após Open() da HBTIP

Enviado: 05 Mar 2020 21:26
por Luizccr
Bingo! UTF BOM!
Bastou converter para UTF sem o BOM a única página PHP que estava com esse formato.
O problema não ocorria, no segundo trecho de código, porque a página para onde apontava estava salva no formato UTF sem o BOM.