在windows上使用gtk,经常遇到的问题是:gtk中的编码方式是utf8,而我们的windows 系统中使用的编码方式是gb2312,一旦我们要在gtk程序中使用windows api,所传入的参数(如文件名)就必需换成gb2312编码。
下面是一个utf8转换成gb2312的函数,使用完后,要记得释放内存。
#ifdef G_OS_WIN32 /* * NB:the return string must free * */ #include <Windows.h> char *utf8togb2312(char *utf8str) { if(!utf8str) return NULL; int len; len = MultiByteToWideChar(CP_UTF8,0, utf8str,-1,NULL,0); WCHAR *unicodestr = g_new0(WCHAR,len); len = MultiByteToWideChar(CP_UTF8,0, utf8str,-1,unicodestr,len); if(!len) { g_free(unicodestr); } len = WideCharToMultiByte(CP_ACP,0, unicodestr,-1,NULL,0,NULL,NULL); CHAR *gb = g_new(CHAR,len); len = WideCharToMultiByte(CP_ACP,0,unicodestr, -1,(char *)gb,len,NULL,NULL); if(!len) { g_free(unicodestr); g_free(gb); } g_free(unicodestr); //g_printf("%s:%s/n",__FUNCTION__,gb); return gb; } #endif