is there function upper UTF8
best regards kajot
kajot
is there function upper UTF8
best regards kajot
Dear Kajot,
https://deepwiki.com/search/is-there-function-upper-utf8_4f2196b4-d0cf-4512-aeca-74aa0e76b39e?mode=deep
The standard Upper() function in Harbour works with UTF-8 strings when using a UTF-8 codepage:
To use UPPER() with UTF-8 encoded strings in Harbour:
Request the UTF-8 codepage at the top of your program: REQUEST HB_CODEPAGE_UTF8EX or REQUEST HB_CODEPAGE_UTF8
Select the codepage using: hb_cdpSelect("UTF8EX") or hb_cdpSelect("UTF8")
Optionally set terminal codepage using: hb_SetTermCP("UTF8EX") or hb_SetTermCP(hb_cdpTerm())
Once set, the standard Upper() and Lower() functions will work correctly with UTF-8 multi-byte characters
The difference between UTF8 and UTF8EX is that UTF8EX is an extended version with additional character support. Most modern applications use UTF8EX.
does it work in xharbour ?
Antonio
in xHarbour I get
Type: C >>>xhb.exe -o"t.c" -m -n -p -q -gc0 -I"R:\include" -I"R:\include\w32" "t.prg"<<<
xHarbour 1.2.3 Intl. (SimpLex) (Build 20190614)
Copyright 1999-2018, http://www.xharbour.org http://www.harbour-project.org/
Generating object output to 't.obj'...
Type: C >>>xlink.exe -NOEXPOBJ -MAP -FORCE:MULTIPLE -NOIMPLIB -subsystem:console -LIBPATH:"R:\lib" -LIBPATH:"R:\c_lib" -LIBPATH:"R:\c_lib\win" "t.obj" "xhb.lib" "dbf.lib" "nsx.lib" "ntx.lib" "cdx.lib" "rmdbfcdx.lib" "ct3comm.lib" crt.lib kernel32.lib user32.lib winspool.lib ole32.lib oleaut32.lib odbc32.lib odbccp32.lib uuid.lib wsock32.lib ws2_32.lib wininet.lib advapi32.lib shlwapi.lib msimg32.lib mpr.lib OleDlg.lib version.lib -out:"t.exe"<<<
Creating object: t.EXP
Creating library: t.LIB
xLINK: error: Unresolved external symbol '_HB_FUN_HB_CODEPAGE_UTF8EX referenced from (t.obj)'.
xLINK: fatal error: 1 unresolved external(s).
Dear Kajot,
Please try it with REQUEST HB_CODEPAGE_UTF8
#include 'fivewin.ch' #include 'hbxml.ch' #INCLUDE "DTPICKER.CH" #INCLUDE "DBCOMBO.CH"
#define CRLF chr(13)+chr(10) REQUEST DBFCDX
#xtranslate enc(<c>) => If(isutf8(<c>),"UTF8", "ANSI" )
REQUEST HB_CODEPAGE_UTF8 // REQUEST HB_CODEPAGE_UTF8EX //----------------------------------------------------------------------------// function KSEF_V2() ...
NAZWA_:= upper(hb_utf8tostr(tNAZWA,'PLWIN'))
I get error
Creating object: wRVAT.EXP
Creating library: wRVAT.LIB
xLINK: error: Unresolved external symbol '_HB_FUN_HB_CODEPAGE_UTF8 referenced from (konwert.obj)'.
xLINK: fatal error: 1 unresolved external(s).
Type: C >>>Couldn't build: wRVAT.EXE<<< Type: C >>>TMAKEPROJECT<<< Type: C >>>TMAKEPROJECT:REFRESH<<< Type: N >>> 1428<<<
Mira se ayuda,
// C:\FWH\SAMPLES\BUSCACE2.PRG - MODIFICADO EM: 30/10/2025 By Kapiaba
#include "FiveWin.ch"
// Cambiar por ESWIN - Espanhol.
EXTERNAL HB_LANG_PT, HB_CODEPAGE_PTISO, HB_CODEPAGE_PT850
#ifNdef __XHARBOUR__ // Somente para HARBOUR, XHARBOUR nao tem isso ainda.
REQUEST HB_CODEPAGE_UTF8
REQUEST HB_CODEPAGE_UTF8EX
#else
// HB_CDPSELECT( "UTF8EX" ) // abajo.
#endif
FUNCTION BuscaCep()
LOCAL cRet, hCep
LOCAL cCodCid
LOCAL cCep := "01306-000"
#ifdef __XHARBOUR__ // PERFEITO COM XHARBOUR( I Like )
HB_LANGSELECT( 'PT' )
HB_SETCODEPAGE( "PT850" )
HB_CDPSELECT( "PTISO" )
HB_SETCODEPAGE( "UTF8" )
HB_CDPSELECT( "UTF8EX" )
#Else // HARBOUR E ASSIM: ( No like ) kkkkkkkkkkk
HB_LANGSELECT( 'PT' )
HB_SETCODEPAGE( "UTF8" )
HB_CDPSELECT( "UTF8EX" )
HB_SETCODEPAGE( "PT850" )
HB_CDPSELECT( "PTISO" )
#Endif
cCep := StrTran( cCep, "-", "" )
cRet := WebGetCep( cCEP )
hCep := u_JsonToHash( cRet )
Try
cCodCid := StrZero( Val( SubStr(hCep["ibge"],3 ) ), 6 )
Catch
hCep := NIL
End
IF hCep # nil
MsgInfo( Upper( hb_UTF8ToStr( hCep["logradouro"] ) ) + Chr( 13 ) + Chr( 10 ) + ;
Upper( hb_UTF8ToStr( hCep["bairro"] ) ) + Chr( 13 ) + Chr( 10 ) + ;
Upper( hb_UTF8ToStr( hCep["localidade"] ) ) + Chr( 13 ) + Chr( 10 ) + ;
Upper( hb_UTF8ToStr( hCep["ibge"] ) ) + Chr( 13 ) + Chr( 10 ) + ;
Upper( hb_UTF8ToStr( hCep["uf"] ) ) )
ELSE
MsgStop( "CEP não encontrado ou serviço fora do ar" )
ENDIF
RETURN hCep
STATIC FUNCTION Emt_GetHtml( cLink )
LOCAL oOle
LOCAL cHtml := ""
Try
oOle := CreateObject( "Microsoft.XMLHTTP" )
oOle:Open( "GET", cLink, .F. )
oOle:Send()
cHtml := oOle:ResponseBody
oOle := nil
Catch
End
RETURN cHtml
STATIC FUNCTION WebGetCep( cCEP )
LOCAL cUrl, cJsonRet
cUrl := 'http://viacep.com.br/ws/' + cCEP + '/json'
cJsonRet := Emt_GetHtml( cUrl )
RETURN cJsonRet
STATIC FUNCTION u_JsonToHash( cStringJson )
LOCAL hJson := { => }
cStringJson := StrTran( cStringJson, ':[', '=>{' )
cStringJson := StrTran( cStringJson, '":"', '" => "' )
cStringJson := StrTran( cStringJson, '[', '{' )
cStringJson := StrTran( cStringJson, ']', '}' )
cStringJson := StrTran( cStringJson, '":null', '"=>nil' )
cStringJson := StrTran( cStringJson, '":true' , '"=>.t.' )
cStringJson := StrTran( cStringJson, '":false', '"=>.f.' )
cStringJson := StrTran( cStringJson, '":', '"=>' )
cStringJson := StrTran( cStringJson, "\/", "/" )
cStringJson := StrTran( cStringJson, Chr( 13 ), "" )
cStringJson := StrTran( cStringJson, Chr( 10 ), "" )
Try
hJSon := &( cStringJson )
Catch
hJSon := Hash()
End
RETURN hJson
FUNCTION SemAcento( cStr ) // TAMBEM NAO FUNCIONA.
LOCAL cRet := ""
LOCAL nI
LOCAL cCar
LOCAL nPos
LOCAL aCar := {}
cRet := cStr
cRet := StrTran( cRet, "á", "a" )
cRet := StrTran( cRet, "à", "a" )
cRet := StrTran( cRet, "ã", "a" )
cRet := StrTran( cRet, "â", "a" )
cRet := StrTran( cRet, "é", "e" )
cRet := StrTran( cRet, "è", "e" )
cRet := StrTran( cRet, "ê", "e" )
cRet := StrTran( cRet, "í", "i" )
cRet := StrTran( cRet, "ì", "i" )
cRet := StrTran( cRet, "î", "i" )
cRet := StrTran( cRet, "ó", "o" )
cRet := StrTran( cRet, "ò", "o" )
cRet := StrTran( cRet, "õ", "o" )
cRet := StrTran( cRet, "ô", "o" )
cRet := StrTran( cRet, "ú", "u" )
cRet := StrTran( cRet, "ù", "u" )
cRet := StrTran( cRet, "û", "u" )
cRet := StrTran( cRet, "ç", "c" )
cRet := StrTran( cRet, "Á", "A" )
cRet := StrTran( cRet, "À", "A" )
cRet := StrTran( cRet, "Ã", "A" )
cRet := StrTran( cRet, "Â", "A" )
cRet := StrTran( cRet, "É", "E" )
cRet := StrTran( cRet, "È", "E" )
cRet := StrTran( cRet, "Ê", "E" )
cRet := StrTran( cRet, "Í", "I" )
cRet := StrTran( cRet, "Ì", "I" )
cRet := StrTran( cRet, "Î", "I" )
cRet := StrTran( cRet, "Ó", "O" )
cRet := StrTran( cRet, "Ò", "O" )
cRet := StrTran( cRet, "Õ", "O" )
cRet := StrTran( cRet, "Ô", "O" )
cRet := StrTran( cRet, "Ú", "U" )
cRet := StrTran( cRet, "Ù", "U" )
cRet := StrTran( cRet, "Û", "U" )
cRet := StrTran( cRet, "Ç", "C" )
RETURN cRet
// FIN / END - kapiabafwh@gmail.comRegards, saludos.
Thanks but I am using xHarbour
A good reason to move to Harbour :idea:
it's not that easy to rewrite the entire code
Have you just tried to build it using Harbour ?
It may be much easier than you think :idea:
Hello,
I have come to the conclusion that in the end you need a self-written function.
In our old applications — more than 30 years old, dating back to the DOS era — there are too many different code pages in the original data.
https://forums.fivetechsupport.com/viewtopic.php?p=283556#p283556
Best regards,
Otto
xHarbour is PERFECT! No like HARBOUR never! hahahaha.
// C:\FWH\SAMPLES\KAJOT.PRG - MODIFICADO EM: 20/02/2026 By Kapiaba
#include "FiveWin.ch"
// LANGUAGE
EXTERNAL HB_LANG_PT // Replace it with the equivalent in your country or the United States.
EXTERNAL HB_CODEPAGE_PT850 // Replace it with the equivalent in your country or the United States.
EXTERNAL HB_CODEPAGE_PTISO // UNIVERSAL
FUNCTION Main() // MENU PRINCIPAL
LOCAL cRet, hCep
LOCAL cCodCid
LOCAL cCep := "01306-000"
// LANGUAGE
HB_LANGSELECT( 'PT' ) // Replace it with the equivalent in your country or the United States.
HB_SETCODEPAGE( "PT850" ) // Replace it with the equivalent in your country or the United States.
// UTF8
HB_CDPSELECT( "PTISO" )
HB_SETCODEPAGE( "UTF8" )
HB_CDPSELECT( "UTF8EX" )
cCep := StrTran( cCep, "-", "" )
cRet := WebGetCep( cCEP )
hCep := u_JsonToHash( cRet )
Try
cCodCid := StrZero( Val( SubStr(hCep["ibge"],3 ) ), 6 )
Catch
hCep := NIL
End
IF hCep # nil
MsgInfo( Upper( hb_UTF8ToStr( hCep["logradouro"] ) ) + Chr( 13 ) + Chr( 10 ) + ;
Upper( hb_UTF8ToStr( hCep["bairro"] ) ) + Chr( 13 ) + Chr( 10 ) + ;
Upper( hb_UTF8ToStr( hCep["localidade"] ) ) + Chr( 13 ) + Chr( 10 ) + ;
Upper( hb_UTF8ToStr( hCep["ibge"] ) ) + Chr( 13 ) + Chr( 10 ) + ;
Upper( hb_UTF8ToStr( hCep["uf"] ) ) )
ELSE
MsgStop( "CEP não encontrado ou serviço fora do ar" )
ENDIF
RETURN hCep
STATIC FUNCTION WebGetCep( cCEP )
LOCAL cUrl, cJsonRet
cUrl := 'http://viacep.com.br/ws/' + cCEP + '/json'
cJsonRet := Emt_GetHtml( cUrl )
RETURN cJsonRet
STATIC FUNCTION Emt_GetHtml( cLink )
LOCAL oOle
LOCAL cHtml := ""
Try
oOle := CreateObject( "Microsoft.XMLHTTP" )
oOle:Open( "GET", cLink, .F. )
oOle:Send()
cHtml := oOle:ResponseBody
oOle := nil
Catch
End
RETURN cHtml
STATIC FUNCTION u_JsonToHash( cStringJson )
LOCAL hJson := { => }
cStringJson := StrTran( cStringJson, ':[', '=>{' )
cStringJson := StrTran( cStringJson, '":"', '" => "' )
cStringJson := StrTran( cStringJson, '[', '{' )
cStringJson := StrTran( cStringJson, ']', '}' )
cStringJson := StrTran( cStringJson, '":null', '"=>nil' )
cStringJson := StrTran( cStringJson, '":true' , '"=>.t.' )
cStringJson := StrTran( cStringJson, '":false', '"=>.f.' )
cStringJson := StrTran( cStringJson, '":', '"=>' )
cStringJson := StrTran( cStringJson, "\/", "/" )
cStringJson := StrTran( cStringJson, Chr( 13 ), "" )
cStringJson := StrTran( cStringJson, Chr( 10 ), "" )
Try
hJSon := &( cStringJson )
Catch
hJSon := Hash()
End
RETURN hJson
// FIN / END - kapiabafwh@gmail.comRegards, saludos.
Antonio where can I download harbour ?