字符编码转换(ISO8859-2 to Unicode)

来源:互联网 发布:山东网络电视台招聘 编辑:程序博客网 时间:2024/05/19 03:42

首先得到ISO8859-2和unicode的字符对照表,如下:

static const unsigned short iso8859_2_2uni[96] = {
    /* 0xa0 */
    0x00a0, 0x0104, 0x02d8, 0x0141, 0x00a4, 0x013d, 0x015a, 0x00a7,
    0x00a8, 0x0160, 0x015e, 0x0164, 0x0179, 0x00ad, 0x017d, 0x017b,
    /* 0xb0 */
    0x00b0, 0x0105, 0x02db, 0x0142, 0x00b4, 0x013e, 0x015b, 0x02c7,
    0x00b8, 0x0161, 0x015f, 0x0165, 0x017a, 0x02dd, 0x017e, 0x017c,
    /* 0xc0 */
    0x0154, 0x00c1, 0x00c2, 0x0102, 0x00c4, 0x0139, 0x0106, 0x00c7,
    0x010c, 0x00c9, 0x0118, 0x00cb, 0x011a, 0x00cd, 0x00ce, 0x010e,
    /* 0xd0 */
    0x0110, 0x0143, 0x0147, 0x00d3, 0x00d4, 0x0150, 0x00d6, 0x00d7,
    0x0158, 0x016e, 0x00da, 0x0170, 0x00dc, 0x00dd, 0x0162, 0x00df,
    /* 0xe0 */
    0x0155, 0x00e1, 0x00e2, 0x0103, 0x00e4, 0x013a, 0x0107, 0x00e7,
    0x010d, 0x00e9, 0x0119, 0x00eb, 0x011b, 0x00ed, 0x00ee, 0x010f,
    /* 0xf0 */
    0x0111, 0x0144, 0x0148, 0x00f3, 0x00f4, 0x0151, 0x00f6, 0x00f7,
    0x0159, 0x016f, 0x00fa, 0x0171, 0x00fc, 0x00fd, 0x0163, 0x02d9,
};


int gStringToUnicode(LPBYTE lString)

{

    int nLength = 0;
    nLength = strlen((LPCSTR) lString);

    if (nLength < 1)
         return 0;


    char *tempString = new char[nLength];
    memset(tempString, NULL, nLength);

    memcpy(tempString, lString, nLength);


    WCHAR  wchr[1] = L"";
    for (int i=0; i < (nLength*2); i+=2)

    {

         if ((BYTE)lString[i] > 0x9F)//The special character of 8859-2 start from 0xA0

         {

              //8859-2 the same with 3,4,5,6,7,8, but comparison table is different.

              //Here is only 8859-2 comparison table with unicode

              wchr[0] = iso8859_2_2uni[(BYTE)lString[i]-0xA0];

              

              char chr[2] = {0};
              memcpy(chr, wchr, 2);
              tempString[i] = chr[0];
              tempString[i+1] = chr[1];
        }

        else

        {

              tempString[i]    = lString[i];
              tempString[i+1] = 0x00;

         }             

    }


    memcpy(lString, tempString, nLength);

    return nLength;

}

 

 

 

 

 

原创粉丝点击