سلام
این تابع هر رشته ای که دارای کد پیج ویندوز عربی یا CP1256 باشد را به کد پیج استاندارد UTF-8 تبدیل میکند.
FUNCTION Cp1256ToUtf8
LPARAMETERS tcString
lcReturnString = ""
FOR i=1 TO LEN(tcString)
lcChar1 = Cp1256ToUtf8No(SUBSTR(tcString,i,1))
DO CASE
CASE LEN(lcChar1)=2
lcChar2 = CHR(EVALUATE("0x"+lcChar1))
CASE LEN(lcChar1)=4
lcChar2 = CHR(EVALUATE("0x"+SUBSTR(lcChar1,1,2)))+;
CHR(EVALUATE("0x"+SUBSTR(lcChar1,3,2)))
CASE LEN(lcChar1)=6
lcChar2 = CHR(EVALUATE("0x"+SUBSTR(lcChar1,1,2)))+;
CHR(EVALUATE("0x"+SUBSTR(lcChar1,3,2)))+;
CHR(EVALUATE("0x"+SUBSTR(lcChar1,5,2)))
ENDCASE
lcReturnString = lcReturnString + lcChar2
NEXT
RETURN lcReturnString
FUNCTION Cp1256ToUtf8No
LPARAMETERS tcChar
LOCAL lcUtf8,lnComma1,lnComma2, lnChar
lnChar = ASC(tcChar)
IF lnChar=0
RETURN "00"
ENDIF
lcUtf8 = "0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09 ,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,"+;
"0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19 ,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,"+;
"0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29 ,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,"+;
"0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39 ,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,"+;
"0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49 ,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,"+;
"0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59 ,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,"+;
"0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69 ,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,"+;
"0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79 ,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,"+;
"0xE282AC,0xD9BE,0xE2809A,0xC692,0xE2809E,0xE280A6 ,0xE280A0,0xE280A1,0xCB86,"+;
"0xE280B0,0xD9B9,0xE280B9,0xC592,0xDA86,0xDA98,0xD A88,0xDAAF,0xE28098,0xE28099,"+;
"0xE2809C,0xE2809D,0xE280A2,0xE28093,0xE28094,0xDA A9,0xE284A2,0xDA91,0xE280BA,"+;
"0xC593,0xE2808C,0xE2808D,0xDABA,0xC2A0,0xD88C,0xC 2A2,0xC2A3,0xC2A4,0xC2A5,"+;
"0xC2A6,0xC2A7,0xC2A8,0xC2A9,0xDABE,0xC2AB,0xC2AC, 0xC2AD,0xC2AE,0xC2AF,0xC2B0,"+;
"0xC2B1,0xC2B2,0xC2B3,0xC2B4,0xC2B5,0xC2B6,0xC2B7, 0xC2B8,0xC2B9,0xD89B,0xC2BB,"+;
"0xC2BC,0xC2BD,0xC2BE,0xD89F,0xDB81,0xD8A1,0xD8A2, 0xD8A3,0xD8A4,0xD8A5,0xD8A6,"+;
"0xD8A7,0xD8A8,0xD8A9,0xD8AA,0xD8AB,0xD8AC,0xD8AD, 0xD8AE,0xD8AF,0xD8B0,0xD8B1,"+;
"0xD8B2,0xD8B3,0xD8B4,0xD8B5,0xD8B6,0xC397,0xD8B7, 0xD8B8,0xD8B9,0xD8BA,0xD980,"+;
"0xD981,0xD982,0xD983,0xC3A0,0xD984,0xC3A2,0xD985, 0xD986,0xD987,0xD988,0xC3A7,"+;
"0xC3A8,0xC3A9,0xC3AA,0xC3AB,0xD989,0xD98A,0xC3AE, 0xC3AF,0xD98B,0xD98C,0xD98D,"+;
"0xD98E,0xC3B4,0xD98F,0xD990,0xC3B7,0xD991,0xC3B9, 0xD992,0xC3BB,0xC3BC,0xE2808E,"+;
"0xE2808F,0xDB92,"
lnComma1 = AT(",",lcUtf8,lnChar)
lnComma2 =AT(",",lcUtf8,lnChar+1)
RETURN SUBSTR(lcUtf8,lnComma1+3,lnComma2-lnComma1-3)