linux下c++编程 GBKTOUTF8问题

来源:百度知道 编辑:UC知道 时间:2024/06/08 09:13:21
先看我在windows下vs2008的GBK转UTF8代码
[code]
setup.cpp:
char* Utf8ToGBK(const char* strUtf8)
{
int len=MultiByteToWideChar(CP_UTF8, 0, (LPCTSTR)strUtf8, -1, NULL,0);
unsigned short * wszGBK = new unsigned short[len+1];
memset(wszGBK, 0, len * 2 + 2);
MultiByteToWideChar(CP_UTF8, 0, (LPCTSTR)strUtf8, -1, (LPWSTR)wszGBK, len);
len = WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)wszGBK, -1, NULL, 0, NULL, NULL);
char *szGBK=new char[len + 1];
memset(szGBK, 0, len + 1);
WideCharToMultiByte (CP_ACP, 0, (LPCWSTR)wszGBK, -1, (LPSTR)szGBK, len, NULL,NULL);
return szGBK;
}

char* GBKToUtf8(const char* strGBK)
{
int len=MultiByteToWideChar(CP_ACP, 0, (LPCTSTR)strGBK, -1, NULL,0);
unsigned short * wszUtf8 = new unsigned short[len+1];
memset(wszUtf8, 0, len * 2 + 2);
MultiByteToWideCha

我想,楼主自己去看看iconv的代码,或者搜索一下比较适宜。

呵呵,我也不会哒,那么,等高手吧。

看了一下楼下,用的是g_convert()转换的编码,那么楼主可以试试直接调用这个来完成转换撒,如果要做到和楼主的函数一致的形式,可以自己封装一下。

GLIB_INCLUDES=`pkg-config --cflags glib-2.0 gthread-2.0`
GLIB_LIBS=`pkg-config --libs glib-2.0 gthread-2.0`

/*
* writed by kf701
*/

#include <stdio.h>
#include <glib.h>

int main(int argch,char *argv[])
{
GError * ge = NULL;

char inbuf[20*1024];
FILE *in = fopen(argv[1],"r");
int size = fread( inbuf, 1, sizeof(inbuf), in );
printf( "file size = %d\n", size );

int outlen = 0, readlen = 0;
char *out = g_convert( inbuf, size, "UTF-8", "GBK", &readlen, &outlen, &ge );

printf( "convert outlen=%d , readlen = %d\n", outlen, readlen );

if( NULL == out )
{