C++基础 —— (28)C++14字符转码
»
     在C++中,有一种编程方式,叫做面向Facet编程,也就是面向部分代码编程。也就是用子类实现原有类的虚函数,同时完整地使用原有类的其他函数。从而让子类变成可以实例化的原有类的实体类。
 
     下面是一个使用Facet编程方式实现的字符集转码的例子代码:
 
 #include<string>
 #include<locale>
 #include<codecvt>
 #include<utility>
 
 #include<fstream>
 #include<iostream>
 
 //实现Facet类的析构函数的子类
 template <class CodeCvtFacet>
 class DeletableCodeCvt:CodeCvtFacet {
     using CodeCvtFacet::CodeCvtFacet;
     ~DeletableCodeCvt() {}
 };
 typedef DeletableCodeCvt<std::codecvt_byname<wchar_t, char, std::mbstate_t>> CodeCvtFromMbToWChar;
 
 int main(int argc,char** argv){
 	std::wstring_convert<CodeCvtFromMbToWChar> gb18030ToWCharConvert(new CodeCvtFromMbToWChar("zh_CN.GB18030"));
 	std::wstring_convert<std::codecvt_utf8<wchar_t>> utf8Convert;
 
 	std::string line;
 	std::ifstream is("./gb18030_words.txt");
 	if(is.is_open()){
 		while(getline(is,line)){
 			std::cout<<line;
 			std::wstring wString = gb18030ToWCharConvert.from_bytes(line);
 			std::string utf8String = utf8Convert.to_bytes(wString);
 			std::cout<<utf8String;
 		}
 		is.close();
 	}else{
 		std::cout<<"is is not open";
 	}
 }
 
 
«
——张人杰·www.v-signon.com学习者共勉
返回上一页
备案号:京ICP备19038994号-2
个人作品网站:www.up-task.com 主办:个人 English
网站内容如有侵权,请联系删除:1307776259@qq.com