手机怎么改txt编码把UTF-8编码改成ANSI编码,,是手机 手机

一、Qt环境设置
文件从window上传到Ubuntu后会显示乱码,原因是因为ubuntu环境设置默认是utf-8,Windows默认都是GBK.Windows环境下,Qt Creator,菜单-&工具-&选项-&文本编辑器-&行为-&文件编码:默认编码:System(简体中文windows系统默认指的是GBK编码,即下拉框选项里的GBK/windows-936-2000/CP936/MS936/windows-936)
二、编码知识科普Qt常见的两种编码是:UTF-8和GBK★UTF-8:Unicode TransformationFormat-8bit,允许含BOM,但通常不含BOM。是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24为(三个字节)来编码。UTF-8包含全世界所有国家需要用到的字符,是国际编码,通用性强。UTF-8编码的文字可以在各国支持UTF8字符集的浏览器上显示。如,如果是UTF8编码,则在外国人的英文IE上也能显示中文,他们无需下载IE的中文语言支持包。★GBK是国家标准GB2312基础上扩容后兼容GB2312的标准。GBK的文字编码是用双字节来表示的,即不论中、英文字符均使用双字节来表示,为了区分中文,将其最高位都设定成1。GBK包含全部中文字符,是国家编码,通用性比UTF8差,不过UTF8占用的数据库比GBD大。GBK是GB2312的扩展,除了兼容GB2312外,它还能显示繁体中文,还有日文的假名。★GBK、GB2312等与UTF8之间都必须通过Unicode编码才能相互转换:GBK、GB2312--Unicode--UTF8UTF8--Unicode--GBK、GB2312&★在简体中文windows系统下,ANSI编码代表GBK/GB2312编码,ANSI通常使用0x80~0xFF范围的2个字节来表示1个中文字符。0x00~0x7F之间的字符,依旧是1个字节代表1个字符。Unicode(UTF-16)编码则所有字符都用2个字节表示。
三、编码转换UTF-8与ANSI(即GBK)的互转,可以使用EditPlus工具"文件另存为"或者Encodersoft编码转换工具对.cpp和.h源文件文本进行批量转换.
四、Qt编码指定Qt需要在main()函数指定使用的字符编码:
#include &QTextCodec&
QTextCodec *codec = QTextCodec::codecForName("GBK");//情况1
QTextCodec::setCodecForTr(codec);QTextCodec::setCodecForLocale(codec);QTextCodec::setCodecForCStrings(codec);
QTextCodec *codec = QTextCodec::codecForName("UTF-8");//情况2QTextCodec::setCodecForTr(codec);QTextCodec::setCodecForLocale(codec);QTextCodec::setCodecForCStrings(codec);
这里只列举大家最常用的3个编译器(微软VS的中的cl,Mingw中的g++,Linux下的g++),源代码分别采用GBK和无BOM的UTF-8以及有BOM的UTF-8这3种编码进行保存,发生的现象如下表所示。
源代码的编码
win mingw-g++
UTF-8(无BOM)
error C2001: 常量中有换行符
编译失败error C2001: 常量中有换行符
win&mingw-g++
UTF-8(有BOM)
win&mingw-g++
五、应用案例QCom跨平台串口调试助手()源代码qcom\mainwindow.cpp,aboutdialog.cpp等文件用的是UTF-8编码(无BOM);但是qcom\qextserial\*.*文件用的是ANSI编码.在linux环境编译完全OK.笔者Windows环境的Qt Creator+微软VS编译器,环境设置用的是ANSI(即GBK)编码.编译源文件会报错.错误提示"fatal error C1018: 意外的 #elif".
解决方法由两种:
把qcom\的所有文件都用工具转换成ANSI编码,main()函数使用QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
先把Qt Creator环境设置用的是UTF-8编码,
再把qcom\的所有文件都用工具转换成UTF-8+BOM编码,请注意,如果文件转换成UTF-8(无BOM),编译仍会失败.main()函数使用QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));//注意,此处仍是"GBK",不是"UTF-8"重新编译,OK!
Windows环境下,Qt Creator+微软VS编译器,新建工程,
1、如果该工程不需要跨平台使用(只在win),那么工程设置请使用GBK的编码方式.
2、如果该工程要跨平台使用(win+linux),那么工程设置请使用UTF-8+BOM的编码方式.
Linux环境下,Qt Creator+gcc,新建工程,
没有GBK编码可选,默认是UTF-8(无BOM)编码方式,考虑到跨平台,建议选择UTF-8+BOM的编码方式.
七、参考文献
Qt中文乱码问题
Views(...) Comments()txt文件,如何人批量把ansi编码变成utf-8编码
本回答由提问者推荐
var sogou_ad_id=731547;
var sogou_ad_height=160;
var sogou_ad_width=690;新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
小富即安, 积分 2086, 距离下一级还需 2914 积分
论坛徽章:2
现在需要将linux下生成的utf-8文件转换成ANSI文件,,因为要拿到windows下进行进一步的编辑,所以必须转换
linux下有没有这样的工具?
大富大贵, 积分 13284, 距离下一级还需 6716 积分
论坛徽章:11
使用BIN传输~~
小富即安, 积分 3308, 距离下一级还需 1692 积分
论坛徽章:1
iconv -f UTF8 -t ANSI 复制代码
小富即安, 积分 2086, 距离下一级还需 2914 积分
论坛徽章:2bat 批处理 ,那位大神提供一下的代码,我有好多UTF8编码的txt文档,我想通过代码的形式转换成ANSI编码的_百度知道
bat 批处理 ,那位大神提供一下的代码,我有好多UTF8编码的txt文档,我想通过代码的形式转换成ANSI编码的
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
采纳数:30059
获赞数:30960
@echo&off(echo&aCode&=&&UTF-8&echo&bCode&=&&GB2312&echo&Set&objArgs&=&WScript.Argumentsecho.echo&FileUrlSrc&=&objArgs^(0^)echo&FileUrlDst&=&objArgs^(1^)echo&Call&WriteToFile^(FileUrlDst,&ReadFile^(FileUrlSrc,&aCode^),&bCode^)echo.echo&Function&ReadFile^(FileUrlSrc,&CharSet^)echo&&&&&Dim&Strecho&&&&&Set&stm&=&CreateObject^(&Adodb.Stream&^)echo&&&&&stm.Type&=&2echo&&&&&stm.mode&=&3echo&&&&&stm.charset&=&CharSetecho&&&&&stm.Openecho&&&&&stm.loadfromfile&FileUrlSrcecho&&&&&Str&=&stm.readtextecho&&&&&stm.Closeecho&&&&&Set&stm&=&Nothingecho&&&&&ReadFile&=&Strecho&End&Functionecho.echo&Function&WriteToFile&^(FileUrlDst,&Str,&CharSet^)echo&&&&&Set&stm&=&CreateObject^(&Adodb.Stream&^)echo&&&&&stm.Type&=&2echo&&&&&stm.mode&=&3echo&&&&&stm.charset&=&CharSetecho&&&&&stm.Openecho&&&&&stm.WriteText&Strecho&&&&&stm.SaveToFile&FileUrlDst,&2echo&&&&&stm.flushecho&&&&&stm.Closeecho&&&&&Set&stm&=&Nothingecho&End&Function)&U82ANI.vbsfor&/r&%%a&in&(*.txt)&do&(&&&&U82ANI.vbs&&%%~a&&&%%~a.ansi&&&&&move&/y&&%%~a.ansi&&&%%~a&&nul)del&U82ANI.vbspause放到UTF8编码的txt文件一起后运行
为你推荐:
其他类似问题
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。用C语言如何将UTF-8编码的txt文件改成ANSI编码的文件,非常感谢!_百度知道
用C语言如何将UTF-8编码的txt文件改成ANSI编码的文件,非常感谢!
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
采纳数:9081
获赞数:16687
请参照下面方法,把 CFile类 改成 FILE*。 写字符串改成写文件流。注意,汉字在utf8中占3个字节。 // unicode to ansivoid 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.Open(_T(&1.txt&), CFile::modeWrite | CFile::modeCreate);
//文件开头
cFile.SeekToBegin();
//写入内容
cFile.Write(szAnsi, ansiLen * sizeof(char));
cFile.Flush();
cFile.Close();
delete[] szA
szAnsi =NULL;
//和上面一样有另一种方法
setlocale(LC_CTYPE, &chs&);
char szStr[100];
//注意下面是大写,在ansi中,代表后面是unicode字符串
sprintf(szStr, &%S&, wszString);
::MessageBoxA(GetSafeHwnd(), szStr, szStr, MB_OK); } // UTF8转UNICODEvoid 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 }
来自电脑网络类芝麻团
采纳数:463
获赞数:582
参与团队:
如果是windows下编程可以调用系统API MultiByteToWideChar转换为Unicode,再用WideCharToMultiByte转换为ANSI。如果不是先编一个UTF8到Unicode转换得函数,再用wcstombs函数转换成ANSI即可另外需要设置一下地域 setlocale(LC_ALL,&chs&);
kaixingui2012
来自电脑网络类芝麻团
kaixingui2012
采纳数:9221
获赞数:27433
参与团队:
只能用软件工具进行转换,如editplus
为你推荐:
其他类似问题
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 手机怎么改txt文件编码 的文章

 

随机推荐