REQUEST HB_CODEPAGE_ESWIN PROCEDURE Main() LOCAL cWindows := "3_desde_n" + Chr( 186 ) + "*factura*" + ; Chr( 225 ) + Chr( 233 ) + Chr( 237 ) + Chr( 243 ) + Chr( 250 ) + ; "*" + Chr( 241 ) + "*" + Chr( 128 ) LOCAL cUtf8 := "3_desde_n" + Chr( 194 ) + Chr( 186 ) + "*factura*" + ; Chr( 195 ) + Chr( 161 ) + Chr( 195 ) + Chr( 169 ) + ; Chr( 195 ) + Chr( 173 ) + Chr( 195 ) + Chr( 179 ) + ; Chr( 195 ) + Chr( 186 ) + "*" + Chr( 195 ) + Chr( 177 ) + ; "*" + Chr( 226 ) + Chr( 130 ) + Chr( 172 ) LOCAL cAscii := "campo_sin_acentos" LOCAL cJson LOCAL hDecoded := {=>} LOCAL hPayload := {=>} LOCAL nFailures := 0 nFailures += AssertTrue( NormalizarComoApi( cWindows ) == cUtf8 ) nFailures += AssertTrue( NormalizarComoApi( cAscii ) == cAscii ) nFailures += AssertTrue( NormalizarComoApi( cUtf8 ) == cUtf8 ) hPayload[ NormalizarComoApi( cWindows ) ] := "valor" cJson := hb_jsonEncode( hPayload, .F. ) hb_jsonDecode( cJson, @hDecoded ) nFailures += AssertTrue( hb_HHasKey( hDecoded, cUtf8 ) ) ErrorLevel( nFailures ) RETURN STATIC FUNCTION NormalizarComoApi( cValue ) IF ! EsAscii( cValue ) .AND. ! hb_StrIsUTF8( cValue ) RETURN hb_StrToUTF8( cValue, "ESWIN" ) ENDIF RETURN cValue STATIC FUNCTION EsAscii( cValue ) LOCAL nIndex LOCAL nLen := Len( cValue ) FOR nIndex := 1 TO nLen IF Asc( SubStr( cValue, nIndex, 1 ) ) > 127 RETURN .F. ENDIF NEXT RETURN .T. STATIC FUNCTION AssertTrue( lCondition ) RETURN iif( lCondition, 0, 1 )