C

时间:2016-06-04 15:15:14

标签: unicode escaping

我使用CURL从维基百科中检索JSON字符串,例如

https://en.wikipedia.org/w/api.php?action=opensearch&limit=1&format=json&search=syntax

我没有使用JSON解析器,我正在寻找一种删除unicode部分的方法,这对我来说毫无用处。

我已经在url中尝试了&utf8=,以及WideCharToMultiByte和wcstombs。

我只想将此字符串转换为ANSI格式,以便在其他应用程序中使用,即使我将丢失数据。

以下是我用来转换字符串的代码:

void UnicodeToAnsi(char *str, char *str2)
{
    unsigned char ch;

    char *pr = str;
    char *pw = str2;

    while ( (*pr) != 0 )
    {
        ch = (*pr);
        if ( ch == '\\' )
        {
            if ( *(pr+1) == 'u')
            {

                char szANSIString [2] = {'\0'};
                wchar_t wcsString[2] = {0,'\0'};

                char h[5]={'\0'};
                int v;
                strncpy(h,pr + 2,4);


                v = (int)strtol(h, NULL, 16);
#if 0
                wcsString[0] = v;

#ifndef _WIN32
                WideCharToMultiByte ( CP_ACP, // ANSI code page
                WC_COMPOSITECHECK,     // Check for accented characters
                wcsString,         // Source Unicode string
                -1,                    // -1 means string is zero-terminated
                szANSIString,          // Destination char string
                sizeof(szANSIString),  // Size of buffer
                NULL,                  // No default character
                NULL );                // Don't care about this flag
#else
                wcstombs(szANSIString, wcsString, sizeof(szANSIString));
#endif
                ch = *szANSIString;
                if (ch == '\0') ch = '?';
#endif

                //bored with this unicode, easy way

                ch = '-';
                if (v == 232) ch = 138;
                if (v == 233) ch = 130;
                if (v == 234) ch = 136;
                if (v == 224) ch = 133;
                if (v == 225) ch = 'a';
                if (v == 226) ch = 'a';
                if (v == 257) ch = 'a';
                if (v == 231) ch = 135;


                pr = pr + 5;
            }

        }
        (*pw) = ch;

        ++pw;
        ++pr;
    }

    *pw = '\0';

    return;

}

0 个答案:

没有答案