Sorry, I'm not familiar with Unicode. Just give me a sample showing the problem and I'll see what I can do.
EMG
#include "fivewin.ch"
function Main()
local cUtf8, cWide, nAsc
cUtf8 := "అ"
? cUtf8
cWide := UTF8TOUTF16( cUtf8 )
nAsc := BIN2W( cWide )
? nAsc
? "Proof", HB_UTF8CHR( nAsc )
return nil
Enrico Maria Giordano wrote:So, what about HB_UTF8ASC()? Do we need it?
EMG
#pragma BEGINDUMP
#include "error.ch"
#include "hbapierr.h"
static BOOL utf8tou16nextchar( UCHAR ucChar, int * n, USHORT * uc )
{
if( *n > 0 )
{
if( ( ucChar & 0xc0 ) != 0x80 )
return FALSE;
*uc = ( *uc << 6 ) | ( ucChar & 0x3f );
( *n )--;
return TRUE;
}
*n = 0;
*uc = ucChar;
if( ucChar >= 0xc0 )
{
if( ucChar < 0xe0 )
{
*uc &= 0x1f;
*n = 1;
}
else if( ucChar < 0xf0 )
{
*uc &= 0x0f;
*n = 2;
}
else if( ucChar < 0xf8 )
{
*uc &= 0x07;
*n = 3;
}
else if( ucChar < 0xfc )
{
*uc &= 0x03;
*n = 4;
}
else if( ucChar < 0xfe )
{
*uc &= 0x01;
*n = 5;
}
}
return TRUE;
}
HB_FUNC( HB_UTF8ASC )
{
const char * pszString = hb_parc( 1 );
if( pszString )
{
HB_SIZE nLen = hb_parclen( 1 );
USHORT wc = 0;
int n = 0;
while( nLen )
{
if( ! utf8tou16nextchar( ( unsigned char ) *pszString, &n, &wc ) )
break;
if( n == 0 )
break;
pszString++;
nLen--;
}
hb_retnint( wc );
}
else
hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
}
#pragma ENDDUMP
Return to FiveWin for Harbour/xHarbour
Users browsing this forum: No registered users and 105 guests