我自闲庭信步,悠然自得,不亦乐乎.

                                       ------ Keep life simple
GMail/GTalk/MSN:huyi.zg@gmail.com

 

UTF-8与Unicode的相互转换

今天用到了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]是要转换的字节数组

posted on 2006-12-22 15:09 HuYi 阅读(1832) 评论(1)  编辑 收藏 引用 所属分类: C/C++代码Windows

评论

# re: UTF-8与Unicode的相互转换 2008-11-05 14:58 xx

只能处理3字节的中文,碰上1字节的英文就完蛋了。  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

统计

常用链接

留言簿(12)

随笔分类

相册

收藏夹

友情链接

最新随笔

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜