首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

Unicode编码转换成GBK编码(急)

2012-03-31 
Unicode编码转换成GBK编码(急,在线等)在c++builder里,怎么把Unicode编码的txt文件内容转换成GBK编码?[解决

Unicode编码转换成GBK编码(急,在线等)
在c++   builder   里,怎么把Unicode编码的txt文件内容转换成GBK编码?

[解决办法]
啊~看了一下...
上面那个错的 =.=

void UnicodeFileConvertToAnsi(char *src,char *dest)
{
wchar_t *srcBuff;
char *destBuff;
int hFile;
int nSize;

if (!FileExists(src)) {
return;
}

hFile = FileOpen(src,0);
FileRead(hFile, destBuff, 2);

nSize = FileSeek(hFile,0,2);
if (nSize < 4) {
return;
}

destBuff = (char*)malloc(2);
FileSeek(hFile,0,0);
FileRead(hFile, destBuff, 2);
if (!~destBuff[0] && !(destBuff[1] + 2)) {

free(destBuff);
destBuff = (char*)malloc(nSize);
srcBuff = (wchar_t*)malloc(nSize + 1);
memset(srcBuff,0x00,nSize + 1);

FileRead(hFile, srcBuff, nSize);
FileClose(hFile);
strcpy(destBuff,WideCharToString(srcBuff).c_str());
free(srcBuff);

hFile = FileCreate(dest);
FileWrite(hFile,destBuff,strlen(destBuff));
}
FileClose(hFile);
free(destBuff);
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
UnicodeFileConvertToAnsi( "c:\\a.txt ", "c:\\b.txt ");
}
[解决办法]
换成这个吧
都跟你说那个档案不是unicode =.=
这个可以处理非unicode 的档案(复制一份=口=)

void UnicodeFileConvertToAnsi(char *src,char *dest)
{
wchar_t *srcBuff;
char *destBuff;
int hFile;
int nSize;

if (!FileExists(src)) {
return;
}

hFile = FileOpen(src,0);
FileRead(hFile, destBuff, 2);

nSize = FileSeek(hFile,0,2);
if (nSize < 4) {
FileClose(hFile);
return;
}
destBuff = (char*)malloc(2);
FileSeek(hFile,0,0);
FileRead(hFile, destBuff, 2);
if (!~destBuff[0] && !(destBuff[1] + 2)) {

free(destBuff);
destBuff = (char*)malloc(nSize);
srcBuff = (wchar_t*)malloc(nSize + 1);
memset(srcBuff,0x00,nSize + 1);

FileRead(hFile, srcBuff, nSize);
FileClose(hFile);
strcpy(destBuff,WideCharToString(srcBuff).c_str());
free(srcBuff);

hFile = FileCreate(dest);
FileWrite(hFile,destBuff,strlen(destBuff));
} else {

free(destBuff);
destBuff = (char*)malloc(nSize);

FileSeek(hFile,0,0);
FileRead(hFile, destBuff, nSize);
FileClose(hFile);

hFile = FileCreate(dest);
FileWrite(hFile,destBuff,nSize);
}
FileClose(hFile);
free(destBuff);
}
[解决办法]
....... =.=

void UTF8FileConvertToUnicode(char *srcFile,char *destFile)
{
char UnicodeHeader[2] = {0xff,0xfe};
char UTF8Header[3] = {0xef,0xbb,0xbf};
char *srcBuff;
wchar_t *destBuff;
int hFile;
int nSize;


if (!FileExists(srcFile)) {
return;
}

hFile = FileOpen(srcFile,0);
nSize = FileSeek(hFile,0,2);
if (nSize < 3) {
FileClose(hFile);
return;
}

srcBuff = (char*)malloc(3);
FileSeek(hFile,0,0);
FileRead(hFile, srcBuff, 3);
if (!memcmp(UTF8Header,srcBuff,3)) {
free(srcBuff);
destBuff = (wchar_t*)malloc(nSize * 2);
srcBuff = (char*)malloc(nSize + 1);
memset(srcBuff,0x00,nSize + 1);
memset(destBuff,0x00,nSize * 2);

FileRead(hFile, srcBuff, nSize);
FileClose(hFile);




Utf8ToUnicode(destBuff,srcBuff,nSize * 2);

hFile = FileCreate(destFile);
FileWrite(hFile,UnicodeHeader, 2);
FileWrite(hFile,destBuff,wcslen(destBuff) * 2);
}
FileClose(hFile);

free(srcBuff);
free(destBuff);
}

热点排行