用C/C++写一个字符串GBK转UTF-8编码的函数,并写main函数测试(在线等)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用C/C++写一个字符串GBK转UTF-8编码的函数,并写main函数测试(在线等)相关的知识,希望对你有一定的参考价值。

用C/C++写一个字符串GBK转UTF-8编码的函数,并写main函数测试(在线等)
能不能帮我调试正确 谢谢

参考技术A VC6下编译通过, 转化后的文本文档在C盘目录下,你打开后点"文件"-> "另存为",可看到编码类型为"UTF-8",说明转换成功了。还有什么不懂的再问我好了。多给我加分哦!呵呵

#include <stdio.h>
#include <windows.h>

//GBK编码转换到UTF8编码
int GBKToUTF8(unsigned char * lpGBKStr,unsigned char * lpUTF8Str,int nUTF8StrLen)

wchar_t * lpUnicodeStr = NULL;
int nRetLen = 0;

if(!lpGBKStr) //如果GBK字符串为NULL则出错退出
return 0;

nRetLen = ::MultiByteToWideChar(CP_ACP,0,(char *)lpGBKStr,-1,NULL,NULL); //获取转换到Unicode编码后所需要的字符空间长度
lpUnicodeStr = new WCHAR[nRetLen + 1]; //为Unicode字符串空间
nRetLen = ::MultiByteToWideChar(CP_ACP,0,(char *)lpGBKStr,-1,lpUnicodeStr,nRetLen); //转换到Unicode编码
if(!nRetLen) //转换失败则出错退出
return 0;

nRetLen = ::WideCharToMultiByte(CP_UTF8,0,lpUnicodeStr,-1,NULL,0,NULL,NULL); //获取转换到UTF8编码后所需要的字符空间长度

if(!lpUTF8Str) //输出缓冲区为空则返回转换后需要的空间大小

if(lpUnicodeStr)
delete []lpUnicodeStr;
return nRetLen;


if(nUTF8StrLen < nRetLen) //如果输出缓冲区长度不够则退出

if(lpUnicodeStr)
delete []lpUnicodeStr;
return 0;


nRetLen = ::WideCharToMultiByte(CP_UTF8,0,lpUnicodeStr,-1,(char *)lpUTF8Str,nUTF8StrLen,NULL,NULL); //转换到UTF8编码

if(lpUnicodeStr)
delete []lpUnicodeStr;

return nRetLen;


//使用这两个函数的例子
int main()

char cGBKStr[] = "我是中国人!";
char * lpGBKStr = NULL;
char * lpUTF8Str = NULL;
FILE * fp = NULL;
int nRetLen = 0;

nRetLen = GBKToUTF8((unsigned char *) cGBKStr,NULL,NULL);
printf("转换后的字符串需要的空间长度为:%d ",nRetLen);
lpUTF8Str = new char[nRetLen + 1];
nRetLen = GBKToUTF8((unsigned char *)cGBKStr,(unsigned char *)lpUTF8Str,nRetLen);
if(nRetLen)

printf("GBKToUTF8转换成功!");

else

printf("GBKToUTF8转换失败!");
goto Ret0;

fp = fopen("C:\\GBKtoUTF8.txt","wb"); //保存到文本文件
fwrite(lpUTF8Str,nRetLen,1,fp);
fclose(fp);
getchar(); //先去打开那个文本文件看看,单击记事本的“文件”-“另存为”菜单,在对话框中看到编码框变为了“UTF-8”说明转换成功了

Ret0:


if(lpGBKStr)
delete []lpGBKStr;
if(lpUTF8Str)
delete []lpUTF8Str;

return 0;


look at this:

http://www.diybl.com/course/3_program/c++/cppsl/2008320/105871.html

and

http://www.cppblog.com/zgysx/articles/13085.html?opt=admin本回答被提问者采纳

oracle编码gbk加载utf-8文件需要转码么?

是的,Oracle编码GBK加载UTF-8文件需要转码。由于Oracle数据库使用的是GBK编码,而UTF-8文件使用的是UTF-8编码,因此在加载UTF-8文件之前,需要将文件的编码从UTF-8转换为GBK。转码的过程非常简单,只需要使用Oracle的转换函数,将UTF-8文件转换为GBK编码,就可以加载到Oracle数据库中。 参考技术A 在Oracle中加载utf8文件时,需要进行转码,以便数据以正确的格式读取。建议使用UCS2字符集对数据进行转码,以确保数据的正确性。 参考技术B 需要。把UTF8编码转变成GB2312即可实现对高频词的排序 Select Name From whm_c。

以上是关于用C/C++写一个字符串GBK转UTF-8编码的函数,并写main函数测试(在线等)的主要内容,如果未能解决你的问题,请参考以下文章

java 将编码格式为utf-8的文件内容以 GBK编码存到txt文档

Eclipse GBK批量转UTF-8插件(转)

C语言UTF8要怎样转gb2312

utf-8字符串转成中文如何转换

再谈java乱码:GBK和UTF-8互转尾部乱码问题分析

第一模块:开发基础错题本