今天用到了Sqlite,由于它內部是使用UTF-8編碼,所以在Windows應用中出現了亂碼。
簡單的搜索了一下,相互轉換的方法很多,我覺得比較好的,是
http://www.vckbase.com/document/viewdoc/?id=1444我稍微改進了一下:
??? static WCHAR* UTF82Unicode(WCHAR* pBuffer,char *pSource, int buff_size)
??? {
??? ??? int i, j, max;
??? ??? char* uchar = (char *)pBuffer;
??????? max = buff_size - 2;
??? ??? for(i = 0, j = 0; pSource[j] != '\0'; i += 2, j += 3)
??? ??? {
??????????? if (i > max) {
??????????????? break;
??????????? }
??? ??? ??? uchar[i+1] = ((pSource[j] & 0x0F) << 4) + ((pSource[j+1] >> 2) & 0x0F);
??? ??? ??? uchar[i] = ((pSource[j+1] & 0x03) << 6) + (pSource[j+2] & 0x3F);
??? ??? }
??????? uchar[i] = '\0';
??????? uchar[i+1] = '\0';
??????? return pBuffer;
??? }
在Windows中的話,還有更簡單的方法完成轉換:
比如從UTF-8到Unicode:
??? WCHAR buff[255];
???
MultiByteToWideChar(CP_UTF8, 0, argv[i], -1, buff, sizeof(buff));
??? item.name = W2A(buff);
argv[i]是要轉換的字節數組