C语言如何生成UTF-8编码格式的文件

作者&投稿:印哄 (若有异议请与网页底部的电邮联系)
用C语言如何将UTF-8编码的txt文件改成ANSI编码的文件,非常感谢!~

请参照下面方法,把 CFile类 改成 FILE*。 写字符串改成写文件流。
注意,汉字在utf8中占3个字节。
// unicode to ansi
void CConvertDlg::OnBnClickedButtonUnicodeToAnsi()
{
// unicode to ansi
wchar_t* wszString = L"abcd1234你我他";
//预转换,得到所需空间的大小,这次用的函数和上面名字相反
int ansiLen = ::WideCharToMultiByte(CP_ACP, NULL, wszString, wcslen(wszString), NULL, 0, NULL, NULL);
//同上,分配空间要给'\0'留个空间
char* szAnsi = new char[ansiLen + 1];
//转换
//unicode版对应的strlen是wcslen
::WideCharToMultiByte(CP_ACP, NULL, wszString, wcslen(wszString), szAnsi, ansiLen, NULL, NULL);
//最后加上'\0'
szAnsi[ansiLen] = '\0';
//Ansi版的MessageBox API
::MessageBoxA(GetSafeHwnd(), szAnsi, szAnsi, MB_OK);
//接下来写入文本
//写文本文件,ANSI文件没有BOM
CFile cFile;
cFile.Open(_T("1.txt"), CFile::modeWrite | CFile::modeCreate);
//文件开头
cFile.SeekToBegin();
//写入内容
cFile.Write(szAnsi, ansiLen * sizeof(char));
cFile.Flush();
cFile.Close();
delete[] szAnsi;
szAnsi =NULL;

//方法2
//和上面一样有另一种方法
setlocale(LC_CTYPE, "chs");
char szStr[100];
//注意下面是大写,在ansi中,代表后面是unicode字符串
//sprintf
sprintf(szStr, "%S", wszString);
::MessageBoxA(GetSafeHwnd(), szStr, szStr, MB_OK);
}
// UTF8转UNICODE
void CConvertDlg::OnBnClickedButtonU8ToUnicode()
{
//UTF8 to Unicode
//由于中文直接复制过来会成乱码,编译器有时会报错,故采用16进制形式
char* szU8 = "abcd1234\xe4\xbd\xa0\xe6\x88\x91\xe4\xbb\x96\x00";
//预转换,得到所需空间的大小
int wcsLen = ::MultiByteToWideChar(CP_UTF8, NULL, szU8, strlen(szU8), NULL, 0);
//分配空间要给'\0'留个空间,MultiByteToWideChar不会给'\0'空间
wchar_t* wszString = new wchar_t[wcsLen + 1];
//转换
::MultiByteToWideChar(CP_UTF8, NULL, szU8, strlen(szU8), wszString, wcsLen);
//最后加上'\0'
wszString[wcsLen] = '\0';
//unicode版的MessageBox API
::MessageBoxW(GetSafeHwnd(), wszString, wszString, MB_OK);
//写文本同ansi to unicode
}

wofstream wofile("file");
wofile.imbue(locale( "", locale::all ^ locale::numeric));
“”表示表示使用本地语言,这里当然相当于“chs”或者“chinese”。
locale::all表示使用该语言的所有格式设置进行编码转换!
^是异或,locale::numeric表示数字格式。这里的意思是避免转换数字格式!否则123456输出结果会成为123,456这种形式!
1)std::ofstream 支持中文的文件名,可以正常的写入中文(MBCS编码)==>std::string类型
(2)std::wofstream 支持中文的文件名,可以正常的写入中文常量(不带L),如果是带上L的话,需要将Locale设置成"chs"模式,对应std::wstring类型的变量(包含中文)写入文件时,一定要将Locale设置成"chs"模式,否则不能正常写入。
(3)宽字符的流(前面带w的)==>支持按照MBCS写文件,但是仅仅局限于常量比如std::wcout<<"wcout测试";对于MBCS的变量(std::string)来说将会产生编译错误,例:std::string str = "中文";std::wcout<<str;
(4)对于宽字符的流如果是指明使用Unicode的话(std::wstring),就需要相应的设置区域了,调用相应的imbue方法
(5)总结一般的读写文件使用std::ofstream就行了,支持汉语,==>包括文件名,和文件写入

下面的Unix下函数可以会帮到你

getenv(取得环境变量内容)
相关函数 putenv,setenv,unsetenv
表头文件 #include<stdlib.h>
定义函数 char * getenv(const char *name);
函数说明 getenv()用来取得参数name环境变量的内容。参数name为环境变量的名称,如果该变量存在则会返回指向该内容的指针。环境变量的格式为name=value。
返回值 执行成功则返回指向该内容的指针,找不到符合的环境变量名称则返回NULL。
范例 #include<stdlib.h>
mian()
{
char *p;
if((p = getenv(“USER”)))
printf(“USER=%s\n”,p);
}

执行 USER = root

putenv(改变或增加环境变量)
相关函数 getenv,setenv,unsetenv
表头文件 #include4<stdlib.h>
定义函数 int putenv(const char * string);
函数说明 putenv()用来改变或增加环境变量的内容。参数string的格式为name=value,如果该环境变量原先存在,则变量内容会依参数string改变,否则此参数内容会成为新的环境变量。
返回值 执行成功则返回0,有错误发生则返回-1。
错误代码 ENOMEM 内存不足,无法配置新的环境变量空间。
范例 #include<stdlib.h>
main()
{
char *p;
if((p = getenv(“USER”)))
printf(“USER =%s\n”,p);
putenv(“USER=test”);
printf(“USER+5s\n”,getenv(“USER”));
}

执行 USER=root
USER=root

setenv(改变或增加环境变量)
相关函数 getenv,putenv,unsetenv
表头文件 #include<stdlib.h>
定义函数 int setenv(const char *name,const char * value,int overwrite);
函数说明 setenv()用来改变或增加环境变量的内容。参数name为环境变量名称字符串。
参数 value则为变量内容,参数overwrite用来决定是否要改变已存在的环境变量。如果overwrite不为0,而该环境变量原已有内容,则原内容会被改为参数value所指的变量内容。如果overwrite为0,且该环境变量已有内容,则参数value会被忽略。
返回值 执行成功则返回0,有错误发生时返回-1。
错误代码 ENOMEM 内存不足,无法配置新的环境变量空间
范例 #include<stdlib.h>
main()
{
char * p;
if((p=getenv(“USER”)))
printf(“USER =%s\n”,p);
setenv(“USER”,”test”,1);
printf(“USER=%s\n”,getenv(“USEr”));
unsetenv(“USER”);
printf(“USER=%s\n”,getenv(“USER”));
}

执行 USER = root
USER = test
USER = (null)

哎呀。都是干嘛的啊?很简单的啊。

你用二进制的方式写文件,不就行了啊。
写文件的时候,把要写入的数据,用一个函数转换程utf8编码的数据,就ok了啊
虽然我没在linux下编过,但每个系统,每个开发环境,肯定提供了 编码转换的函数库 的啊

1、用二进制的方式写文件。写文件的时候,把要写入的数据,用一个函数转换程utf8编码的数据,就好了。
2、更简单的方法:
在linux下使用 这个脚本可以批量成为utf8
#!/bin/sh
#Convert all xml config files to EUC
for file in $(find . -name '*.xml') ;
do
if [ -f $file ] ; then
#echo Converting to euc: $file
nkf -utf8 $file > temp_file
mv -f temp_file $file
fi
done

如果你要在linux下使用 这个脚本可以让你批量成为utf8
#!/bin/sh
#Convert all xml config files to EUC

for file in $(find . -name '*.xml') ;
do
if [ -f $file ] ; then
#echo Converting to euc: $file
nkf -utf8 $file > temp_file
mv -f temp_file $file
fi
done

如果你是用弄utf8文件的话 使用emeditor free 右下角 很好用的

自动生成我不会,笨办法就是自己写一个编码器,转换成utf-8格式,下面是utf-8的介绍,希望有帮助:
http://baike.baidu.com/view/25412.htm


gbk怎么转换成utf8gbk怎么转换成utf-8
GBK(gb2312)织梦dede模板文件转换为UTF-8编码dede模板文件第一步:把每个模板的头部metahttp-equiv="Content-Type"content="text\/html;charset=gb2312">改为metahttp-equiv="Content-Type"content="text\/html;charset=utf-8"\/>第二步:把所有的模板文件用editplus(文本编辑软件,很好用,网上很多下载)...

win10系统下如何把中文变成乱码
1、控制面板时钟和区域更改日期、时间或数字格式管理非Unicode程序的语言;2、点击“更改系统区域设置”,选择当前系统区域设置为“中文(简体,中国)”;3、并勾选“Bate版:使用UnicodeUTF-8提供全球语言支持”,点击确定后注销重启即可。如果无法解决您的问题,您可以尝试以下方案切换您的系统显示语言,看看...

如何将文本转化为UTF-8编码
1. 打开记事本。2. 在“文件”菜单中选择“打开”以选择要转换的文本文件。3. 在打开文件后,点击“文件”菜单中的“另存为”。4. 在另存为对话框中,选择“UTF-8”编码格式,并保存文件。首先,我们需要了解什么是UTF-8编码。UTF-8是一种可变长度的Unicode编码方式,可以用来表示世界上的任何字...

如何用记事本批量将文本文件转换成UTF-8?
1、在电脑上打开或新建一个TXT文本文件,输入文本内容。然后在界面的上方工具栏中找到“文件”选项,进行点击。然后在出现的下拉框中,点击“另存为”选项。然后在出现的窗口中,将编码选项设置为“UTF-8”。2、点击右上角的“管理”标签。点击“更改系统区域设置”,勾选“beta版:使用UnicodeUTF-8提...

怎么把C语言平台设置为utf-8教程
为fopen指定一个编码,然后写入wchar_t字符串,最终写入的文件就是UTF-8编码。

ASCII、unicode、utf
unicode 码在这种背景下诞生了, 它统一了全世界的语言符号 。使用 U+*** 表示, * 为16进制数.unicode 在实际应用中是有问题的,比如 对于多字节字符,如何让机器知道这是一个字符而不是多个字符 ,所以在与机器实际交互中,需要将unicode转换格式后使用,这就出现了UTF(UTF,是UnicodeTransformation...

C语言如何生成UTF-8编码格式的文件
定义函数 char * getenv(const char *name);函数说明 getenv()用来取得参数name环境变量的内容。参数name为环境变量的名称,如果该变量存在则会返回指向该内容的指针。环境变量的格式为name=value。返回值 执行成功则返回指向该内容的指针,找不到符合的环境变量名称则返回NULL。范例 #include<stdlib...

易语言文字乱码,编码转换怎么写?
1、新建两个编辑框组件。2、把是否允许多行选择 真 滚动条选择 纵向滚动条 这样文本过长可以拉动滚动条查看。3、然后新建一个按钮组件。4、把按钮名字改成 GB2312转UTF8。5、双击 GB2312转UTF8按钮 进入代码编辑模式 写出代码,编辑框2.内容 = 到文本 (编码转换 (到字节集 (编辑框1.内容), ...

易语言汉字转utf-8
编辑框2.内容 = 编码_gb2312到utf8 (编辑框1.内容)知识点提醒: 易语言编辑框,这些全是GBK格式的编码,所以用到精易模块中的 ,编码_gb2312到UTF8这个命令,就行了 反之, 如果某网页源码在易语言显示是乱码看不懂的汉字,那么就需要转码为GBK编码格式的,命令为: 编码-utf8 到GBK GBK和GB...

C语言如何生成UTF-8编码格式的文件
哎呀。都是干嘛的啊?很简单的啊。你用二进制的方式写文件,不就行了啊。写文件的时候,把要写入的数据,用一个函数转换程utf8编码的数据,就ok了啊 虽然我没在linux下编过,但每个系统,每个开发环境,肯定提供了 编码转换的函数库 的啊

北京市18369205630: C语言如何生成UTF - 8编码格式的文件 -
晁元赛尼: 1、用二进制的方式写文件.写文件的时候,把要写入的数据,用一个函数转换程utf8编码的数据,就好了. 2、更简单的方法: 在linux下使用 这个脚本可以批量成为utf8 #!/bin/sh #Convert all xml config files to EUC for file in $(find . -name '*.xml') ; doif [ -f $file ] ; then#echo Converting to euc: $filenkf -utf8 $file > temp_filemv -f temp_file $filefidone

北京市18369205630: 如何使用C语言将汉字转换成UTF8编码,如将“你好”转成:%E4%BD%A0%E5%A5% -
晁元赛尼: 你说的好像是不对.这是把ascii马用16进制表示.并不是utf8,我不知道你要干什么,不过我猜你做的是web应用,需要把特殊字符转化成%16进制格式,如果你的系统真是utf8的话,我想你应该这么做 用iconv_open和iconv,先把字符串变成utf-8.然后在把这个串中的每个字节都变成16进制加%的格式. 如果你只是需要16进制转换,那就简单了.把没有字符的ascii拿出来,sprintf(%02x)成16进制,在合起来就成.

北京市18369205630: 如何在c语言中操作UTF - 8字符 -
晁元赛尼: 那你就去了解一下 UTF-8 的编码规则啊, 简单来说读取某个字节, 判断它是多字节的还是单字节的,甚至是多字节的非首字节... 如果怕是一些标点符号,再把这些标点符号的判断值加进去 .

北京市18369205630: 如何将一个汉字用C语言将其转换成Unicode编码最好直接编成UTF - 8,是不是vc里面有函数可以直接编?求程序 -
晁元赛尼: #include<stdio.h> #include<windows.h> void GetUtf8(unsigned short uni) {unsigned char utf_8[3];utf_8[0]=(0xe<<4) | ((uni & 0xf000)>>12);//相当于把二进制1110右移12位utf_8[1]=(0x2<<6) | ((uni & 0x0fc0)>>6); //相当于把二进制10右移16位...

北京市18369205630: 如何用C32ASM把中文编码成为UTF8格式 -
晁元赛尼: String str = "任意字符串"; str = new String(str.getBytes("gbk"),"utf-8"); 备注说明: str.getBytes("UTF-8"); 的意思是以UTF-8的编码取得字节new String(XXX,"UTF-8"); 的意思是以UTF-8的编码生成字符串

北京市18369205630: Linux中,如何用C语言实现UTF -
晁元赛尼: linux下支持各种编码,显示不正常可能是你的系统语言设置不对,或者终端编码、字体设置不对. 你可以尝试使用iconv命令,将文件编码转成GBK,然后再打开,看能不能正常显示.例如:iconv -f utf-8 -t gbk a.txt b.txt “我想用C语言将UTF-8编码转换成ACSII编码” -关于这个,ascci不能表示中文字符,所以行不通.

北京市18369205630: 怎么用VC实现ANSI编码的文本文件转换成UTF8编码 C语言
晁元赛尼: 你要先阅读一下宽字符和UTF-8的编码方式,a nsi的编码要转换成宽字符再按utf-8编码(关键的前三个比特位)

北京市18369205630: C语言读写文件的时候怎么控制字符编码方式? -
晁元赛尼: 1. C语言读写文件有两种方式: 一种是文本方式,另一种是2进制方式.日文,中文,unicode, 都要用2进制方式.文件内容的编码和编码的转化,同一种编码的大端或小端编码,都要自己安排处理. 2. C语言不管读写都要通过fopen函数来,...

北京市18369205630: 50分跪求:在c#程序中怎么得到一个汉字的utf - 8编码? -
晁元赛尼: 首先 在C#里面所有的字符都是UTF-8编码的 所以你只要转成int 并且用16位格式化输出即可得到unicode的16进制代码

北京市18369205630: C++怎样新建UTF - 8编码的txt文件?怎样添加字符串到UTF - 8编码的文件?代码是什么? -
晁元赛尼: extern "C" { __declspec(dllexport) int WINAPI icePub_gbkToUTF8(char *strGbkInfo,char *strUtf8Info,int strMaxLen); __declspec(dllexport) int WINAPI icePub_writeTextToFile(char *strText,char *strFilename,int traceFlag); }#pragma comment(lib,"...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网