Page 1 of 1

Json result

Posted: Sun Apr 26, 2026 12:53 pm
by wartiaga

Hi everyone,

I'm integrating with a bank in Brazil to register payment slips, and it's returning a JSON with the following information. How can I change the text to correct accents and Portuguese (Brazil) characters? Thank you.

{"type":"https://developers.c6bank.com.br/v1/err ... quisição inválida.","status":400,"detail":"[BoletoClient]: Erro ao inserir registro: Já existe o título 10201374 com o seu número TESTE002 cadastrado . Bad Request","correlation_id":"9f25b39d97dc1b26-GRU","timestamp":"2026-04-26T12:48:27.169Z"}


Re: Json result

Posted: Sun Apr 26, 2026 2:10 pm
by Antonio Linares

Code: Select all | Expand

/*  
 * Program to fix Portuguese character encoding in JSON responses  
 * from Brazilian bank API integration  
*/
#include "hbjson.ch"
PROCEDURE Main()
// Set language to Portuguese Brazil for proper character support
hb_langSelect("PT_BR")
// Sample garbled JSON response from the bank
cRawJson := '{"type":"https://developers.c6bank.com.br/v1/err ... quisição inválida.",' + ;
'"status":400,' + ;
'"detail":"[BoletoClient]: Erro ao inserir registro: Já existe o título 10201374 com o seu número TESTE002 cadastrado . Bad Request",' + ;
'"correlation_id":"9f25b39d97dc1b26-GRU",' + ;
'"timestamp":"2026-04-26T12:48:27.169Z"}'
? "Original garbled JSON:"
? cRawJson
? ""
// Method 1: Automatic OS encoding conversion
? "Method 1: Using hb_osStrDecode() for automatic conversion:"
cFixedJson1 := FixJsonEncoding(cRawJson)
? cFixedJson1
? ""
// Method 2: Specific codepage conversion (ISO-8859-1)
? "Method 2: Using PTISO codepage conversion:"
cFixedJson2 := FixJsonEncodingWithCodepage(cRawJson, "PTISO")
? cFixedJson2
? ""
// Parse and display the corrected JSON
? "Parsed JSON content:"
ParseAndDisplayJson(cFixedJson1)
RETURN
STATIC FUNCTION FixJsonEncoding(cJsonString)
// Convert from system encoding to Harbour internal encoding
LOCAL cFixed := hb_osStrDecode(cJsonString)
RETURN cFixed
STATIC FUNCTION FixJsonEncodingWithCodepage(cJsonString, cCodepage)
// Convert using specific codepage
LOCAL cFixed := hb_cdpStrToUTF8(cJsonString, cCodepage)
RETURN cFixed
STATIC PROCEDURE ParseAndDisplayJson(cJsonString)
LOCAL hJson, nDecoded
// Decode JSON to Harbour hash
nDecoded := hb_jsonDecode(cJsonString, @hJson)
IF nDecoded > 0 .AND. HB_ISHASH(hJson)
? "Type:", hJson["type"]
? "Status:", hJson["status"]
? "Detail:", hJson["detail"]
? "Correlation ID:", hJson["correlation_id"]
? "Timestamp:", hJson["timestamp"]
ELSE
? "Failed to parse JSON"
ENDIF
RETURN

Re: Json result

Posted: Sun Apr 26, 2026 4:44 pm
by wartiaga
Antonio Linares wrote: Sun Apr 26, 2026 2:10 pm

Code: Select all | Expand

/*  
 * Program to fix Portuguese character encoding in JSON responses  
 * from Brazilian bank API integration  
*/
#include "hbjson.ch"
PROCEDURE Main()
// Set language to Portuguese Brazil for proper character support
hb_langSelect("PT_BR")
// Sample garbled JSON response from the bank
cRawJson := '{"type":"https://developers.c6bank.com.br/v1/err ... quisição inválida.",' + ;
'"status":400,' + ;
'"detail":"[BoletoClient]: Erro ao inserir registro: Já existe o título 10201374 com o seu número TESTE002 cadastrado . Bad Request",' + ;
'"correlation_id":"9f25b39d97dc1b26-GRU",' + ;
'"timestamp":"2026-04-26T12:48:27.169Z"}'
? "Original garbled JSON:"
? cRawJson
? ""
// Method 1: Automatic OS encoding conversion
? "Method 1: Using hb_osStrDecode() for automatic conversion:"
cFixedJson1 := FixJsonEncoding(cRawJson)
? cFixedJson1
? ""
// Method 2: Specific codepage conversion (ISO-8859-1)
? "Method 2: Using PTISO codepage conversion:"
cFixedJson2 := FixJsonEncodingWithCodepage(cRawJson, "PTISO")
? cFixedJson2
? ""
// Parse and display the corrected JSON
? "Parsed JSON content:"
ParseAndDisplayJson(cFixedJson1)
RETURN
STATIC FUNCTION FixJsonEncoding(cJsonString)
// Convert from system encoding to Harbour internal encoding
LOCAL cFixed := hb_osStrDecode(cJsonString)
RETURN cFixed
STATIC FUNCTION FixJsonEncodingWithCodepage(cJsonString, cCodepage)
// Convert using specific codepage
LOCAL cFixed := hb_cdpStrToUTF8(cJsonString, cCodepage)
RETURN cFixed
STATIC PROCEDURE ParseAndDisplayJson(cJsonString)
LOCAL hJson, nDecoded
// Decode JSON to Harbour hash
nDecoded := hb_jsonDecode(cJsonString, @hJson)
IF nDecoded > 0 .AND. HB_ISHASH(hJson)
? "Type:", hJson["type"]
? "Status:", hJson["status"]
? "Detail:", hJson["detail"]
? "Correlation ID:", hJson["correlation_id"]
? "Timestamp:", hJson["timestamp"]
ELSE
? "Failed to parse JSON"
ENDIF
RETURN

Thank you Antonio but I use xharbour, any similar function?
Error: Unresolved external 'HB_FUN_HB_OSSTRDECODE' referenced from D:\LANG\FWH1811\FWH1811\SAMPLES\C6\C6.OBJ
Error: Unresolved external 'HB_FUN_HB_CDPSTRTOUTF8' referenced from D:\LANG\FWH1811\FWH1811\SAMPLES\C6\C6.OBJ


Re: Json result

Posted: Sun Apr 26, 2026 5:35 pm
by Antonio Linares

Code: Select all | Expand

/*    
 * Program to fix Portuguese character encoding in JSON responses    
 * from Brazilian bank API integration - xHarbour version  
*/
PROCEDURE Main()
// Set language to Portuguese Brazil for proper character support
hb_langSelect("PT_BR")
// Sample garbled JSON response from the bank
cRawJson := '{"type":"https://developers.c6bank.com.br/v1/err ... quisição inválida.",' + ;
'"status":400,' + ;
'"detail":"[BoletoClient]: Erro ao inserir registro: Já existe o título 10201374 com o seu número TESTE002 cadastrado . Bad Request",' + ;
'"correlation_id":"9f25b39d97dc1b26-GRU",' + ;
'"timestamp":"2026-04-26T12:48:27.169Z"}'
? "Original garbled JSON:"
? cRawJson
? ""
// Method 1: Automatic OS encoding conversion
? "Method 1: Using hb_osStrDecode() for automatic conversion:"
cFixedJson1 := FixJsonEncoding(cRawJson)
? cFixedJson1
? ""
// Method 2: Specific codepage conversion (ISO-8859-1)
? "Method 2: Using PTISO codepage conversion:"
cFixedJson2 := FixJsonEncodingWithCodepage(cRawJson, "PTISO")
? cFixedJson2
? ""
// Parse and display the corrected JSON
? "Parsed JSON content:"
ParseAndDisplayJson(cFixedJson1)
RETURN
STATIC FUNCTION FixJsonEncoding(cJsonString)
// Convert from system encoding to Harbour internal encoding
LOCAL cFixed := hb_osStrDecode(cJsonString)
RETURN cFixed
STATIC FUNCTION FixJsonEncodingWithCodepage(cJsonString, cCodepage)
// Convert using specific codepage
LOCAL cFixed := hb_cdpStrToUTF8(cJsonString, cCodepage)
RETURN cFixed
STATIC PROCEDURE ParseAndDisplayJson(cJsonString)
LOCAL hJson, nDecoded
// Decode JSON to Harbour hash
nDecoded := hb_jsonDecode(cJsonString, @hJson)
IF nDecoded > 0 .AND. HB_ISHASH(hJson)
? "Type:", hJson["type"]
? "Status:", hJson["status"]
? "Detail:", hJson["detail"]
? "Correlation ID:", hJson["correlation_id"]
? "Timestamp:", hJson["timestamp"]
ELSE
? "Failed to parse JSON"
ENDIF
RETURN

Re: Json result

Posted: Mon Apr 27, 2026 4:16 pm
by karinha

Master, Build 12 del FWH26.03

Code: Select all | Expand

ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ FiveWin for xHarbour 26.03 - Mar. 2026          Harbour development power  ³Ü
³ (c) FiveTech 1993-2026 for Microsoft Windows 9X/NT/200X/ME/XP/Vista/7/8/10 ³Û
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙÛ
ÿ ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
Compiling...
xHarbour 1.3.2 Intl. (SimpLex) (Build 20260103)
Copyright 1999-2026, http://www.xharbour.org http://www.harbour-project.org/
Compiling 'jsonbr.prg' and generating preprocessed output to 'jsonbr.ppo'...

Generating C source output to 'jsonbr.c'...
Done.

Lines 71, Functions/Procedures 4, pCodes 192

jsonbr.prg(19) Warning W0001  Ambiguous reference: 'CRAWJSON'

jsonbr.prg(22) Warning W0001  Ambiguous reference: 'CRAWJSON'

jsonbr.prg(27) Warning W0001  Ambiguous reference: 'CRAWJSON'

jsonbr.prg(27) Warning W0001  Ambiguous reference: 'CFIXEDJSON1'

jsonbr.prg(28) Warning W0001  Ambiguous reference: 'CFIXEDJSON1'

jsonbr.prg(33) Warning W0001  Ambiguous reference: 'CRAWJSON'

jsonbr.prg(33) Warning W0001  Ambiguous reference: 'CFIXEDJSON2'

jsonbr.prg(34) Warning W0001  Ambiguous reference: 'CFIXEDJSON2'

jsonbr.prg(39) Warning W0001  Ambiguous reference: 'CFIXEDJSON1'
Embarcadero C++ 7.70 for Win32 Copyright (c) 1993-2023 Embarcadero Technologies, Inc.
jsonbr.c:
Turbo Incremental Link 6.97 Copyright (c) 1997-2022 Embarcadero Technologies, Inc.
Error: Unresolved external '_HB_FUN_HB_OSSTRDECODE' referenced from C:\FWH2603\SAMPLES\JSONBR.OBJ
Error: Unresolved external '_HB_FUN_HB_CDPSTRTOUTF8' referenced from C:\FWH2603\SAMPLES\JSONBR.OBJ
Error: Unable to perform link
* Linking errors *

Regards, saludos.


Re: Json result

Posted: Mon Apr 27, 2026 4:46 pm
by karinha

Maestro, mira que excelente ejemplo.

Code: Select all | Expand

// C:\FWH2603\SAMPLES\JSONBR2.PRG -> FWH26.03 BUILD 12.

#include "fivewin.ch"

// REQUEST HB_CODEPAGE_PTISO // Load necessary codepage
EXTERNAL HB_LANG_PT, HB_CODEPAGE_PTISO, HB_CODEPAGE_PT850

FUNCTION Main()

   LOCAL cJson, cUtf8Json

   HB_LANGSELECT( 'PT' )
   HB_SETCODEPAGE( "UTF8" )
   HB_CDPSELECT( "UTF8EX" )
   HB_SETCODEPAGE( "PT850" )
   HB_CDPSELECT( "PTISO" )

   // hb_langSelect("PT_BR") // INVALID LANGUAGE // ??? NO EJISTE. jajaja.

   FW_SETUNICODE( .T. )

   // String in local encoding (e.g., ISO-8859-1/PT850)
   cJson := '{ "Nome": "João ", "Cidade ": "São Paulo." }'
    
// Convert to UTF-8 for Web API // cUtf8Json := HB_StrToUTF8( cJson, "PT850" ) // ASI, NO FUNCIONA. // VERY GOOD. cUtf8Json := HB_StrToUTF8( cJson, "PTISO" ) // ASI, FUNCIONA BIEN.
? "Original:", cJson // funciona acentuacion ? "UTF-8:", cUtf8Json // funciona acentuacion con "PTISO", "PT850" -> NO. RETURN NIL // FIN / END

Regards, saludos.


Re: Json result

Posted: Mon Apr 27, 2026 5:34 pm
by Antonio Linares
karinha wrote: Mon Apr 27, 2026 4:16 pm

Master, Build 12 del FWH26.03

Code: Select all | Expand

ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ FiveWin for xHarbour 26.03 - Mar. 2026          Harbour development power  ³Ü
³ (c) FiveTech 1993-2026 for Microsoft Windows 9X/NT/200X/ME/XP/Vista/7/8/10 ³Û
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙÛ
ÿ ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
Compiling...
xHarbour 1.3.2 Intl. (SimpLex) (Build 20260103)
Copyright 1999-2026, http://www.xharbour.org http://www.harbour-project.org/
Compiling 'jsonbr.prg' and generating preprocessed output to 'jsonbr.ppo'...

Generating C source output to 'jsonbr.c'...
Done.

Lines 71, Functions/Procedures 4, pCodes 192

jsonbr.prg(19) Warning W0001  Ambiguous reference: 'CRAWJSON'

jsonbr.prg(22) Warning W0001  Ambiguous reference: 'CRAWJSON'

jsonbr.prg(27) Warning W0001  Ambiguous reference: 'CRAWJSON'

jsonbr.prg(27) Warning W0001  Ambiguous reference: 'CFIXEDJSON1'

jsonbr.prg(28) Warning W0001  Ambiguous reference: 'CFIXEDJSON1'

jsonbr.prg(33) Warning W0001  Ambiguous reference: 'CRAWJSON'

jsonbr.prg(33) Warning W0001  Ambiguous reference: 'CFIXEDJSON2'

jsonbr.prg(34) Warning W0001  Ambiguous reference: 'CFIXEDJSON2'

jsonbr.prg(39) Warning W0001  Ambiguous reference: 'CFIXEDJSON1'
Embarcadero C++ 7.70 for Win32 Copyright (c) 1993-2023 Embarcadero Technologies, Inc.
jsonbr.c:
Turbo Incremental Link 6.97 Copyright (c) 1997-2022 Embarcadero Technologies, Inc.
Error: Unresolved external '_HB_FUN_HB_OSSTRDECODE' referenced from C:\FWH2603\SAMPLES\JSONBR.OBJ
Error: Unresolved external '_HB_FUN_HB_CDPSTRTOUTF8' referenced from C:\FWH2603\SAMPLES\JSONBR.OBJ
Error: Unable to perform link
* Linking errors *

Regards, saludos.

Estimado Joao,

Este ejemplo es para Harbour