STRCONV(strconv(CHR(0xc3)+CHR(0x83)+ CHR(0xc2)+CHR(0x9c) ,10) ,11, 1257, 1)this should return letter Ü but returns two question marks.
SET ECHO OFF SET TALK OFF CLEAR #DEFINE CF_UNICODETEXT 13 DO decl LOCAL hData, lcUnicode MESSAGEBOX( uconv (CHR(0xc3)+CHR(0x83)+ CHR(0xc2)+CHR(0x9c), 1257) ) * end of main FUNCTION uconv (lcSrc, lnCodePage) LOCAL lcDst, lnUsedDefault, lnResult lcDst = Repli(Chr(0), Len(lcSrc) * 2) lnUsedDefault = 0 lnResult = WideCharToMultiByte (lnCodePage, 0,; lcSrc, Len(lcSrc),; @lcDst, Len(lcDst), "?", 0) IF lnResult = 0 * 87 - ERROR_INVALID_PARAMETER * 122 - ERROR_INSUFFICIENT_BUFFER * 1004 - ERROR_INVALID_FLAGS ? "Error code:", GetLastError() lcDst = "" ELSE lcDst = SUBSTR(lcDst, 1, lnResult) ENDIF RETURN SUBSTR(lcDst, 1, AT(Chr(0),lcDst)-1) FUNCTION memwchar2str (lnMemBlock) * copies Unicode characters (two-byte) from a memory address to a VFP string RETURN mem2str(lnMemBlock, Chr(0)+Chr(0)) FUNCTION mem2str(lnMemBlock, end_sequence) #DEFINE BUFFER_SIZE 16 #DEFINE EMPTY_BUFFER Repli(Chr(0), BUFFER_SIZE) DECLARE RtlMoveMemory IN kernel32 As Heap2Str; STRING @, INTEGER, INTEGER LOCAL lnPtr, lcResult, lcBuffer, lnPos lnPtr = lnMemBlock lcResult = "" DO WHILE .T. lcBuffer = EMPTY_BUFFER = Heap2Str (@lcBuffer, lnPtr, BUFFER_SIZE) lnPos = AT(end_sequence, lcBuffer) IF lnPos > 0 lcResult = lcResult + SUBSTR(lcBuffer, 1, lnPos-1) RETURN lcResult ELSE lcResult = lcResult + lcBuffer lnPtr = lnPtr + BUFFER_SIZE ENDIF ENDDO PROCEDURE decl DECLARE INTEGER GetLastError IN kernel32 DECLARE INTEGER OpenClipboard IN user32 INTEGER hwnd DECLARE INTEGER CloseClipboard IN user32 DECLARE INTEGER GetClipboardData IN user32 INTEGER uFormat DECLARE INTEGER IsClipboardFormatAvailable IN user32 INTEGER wFormat DECLARE INTEGER WideCharToMultiByte IN kernel32; INTEGER CodePage, INTEGER dwFlags, STRING lpWideCharStr,; INTEGER cchWideChar, STRING @lpMultiByteStr, INTEGER cbMultiByte,; STRING lpDefaultChar, INTEGER lpUsedDefaultChar