Http请求参数带中文参数时,如{"userName":"用户名123","password":"123456"}
请求返回:01-用户名密码错误
明明用户名以及密码都正确,为啥会不对呢?原来有可能是服务器编码问题,服务器一般是用UTF-8编码,需要对post的json字符串进行utf-8转码后才能被服务器端识别正确。
提供转码函数:
ToUtf8转码参考
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
wchar_t* AnsiToUnicode(const char* lpszStr)
{ wchar_t* lpUnicode; int nLen; if (NULL == lpszStr) return NULL; nLen = ::MultiByteToWideChar(CP_ACP, 0, lpszStr, -1, NULL, 0); if (0 == nLen) return NULL; lpUnicode = new wchar_t[nLen + 1]; if (NULL == lpUnicode) return NULL; memset(lpUnicode, 0, sizeof(wchar_t)* (nLen + 1)); nLen = ::MultiByteToWideChar(CP_ACP, 0, lpszStr, -1, lpUnicode, nLen); if (0 == nLen) { delete[]lpUnicode; return NULL; } return lpUnicode; } bool UnicodeToUtf8( const wchar_t *lpszUnicode, char *lpszUtf8, int nLen ) { int nRet = ::WideCharToMultiByte(CP_UTF8, 0, lpszUnicode, -1, lpszUtf8, nLen, NULL, NULL); return (0 == nRet) ? FALSE : TRUE; } bool AnsiToUtf8( const char *lpszAnsi, char *lpszUtf8, int nLen ) { wchar_t *lpszUnicode = AnsiToUnicode(lpszAnsi); if (NULL == lpszUnicode) return FALSE; int nRet = UnicodeToUtf8(lpszUnicode, lpszUtf8, nLen); delete[]lpszUnicode; return (0 == nRet) ? FALSE : TRUE; } |