分类: C/C++
2009-03-16 06:21:06
//utf-8全字符输出v1.0
//编译器:g++ 4.2.1 20070719 通过
//系统:freebsd 7.1r p2
//其他:系统编码设置为zh_CN.UTF-8 //运行方法:g++ -o sc sc.cpp ; ./sc > temp.text//输出共1112034个utf-8字符,空格之前的ascii码尽包含\t与\n //如有发现错误请留言说明。 #include |
//参考RFC 3629标准原帖参考的资料都太旧或是不准确,应参考如下之地址
//
//
//
//其他未说明的地方同原帖,本次还是没有完全验证
//程序输出中可能包含非utf-8字符,也可能未包含应有之字符 #include#include using std::string;using std::cout;using std::endl;//三个需要的命名空间 int main(){ string str_value(""); //生成部分ascii码,想要全范围将下行for循环的9与11改为0与32即可 for(unsigned char a(9);a!=11;++a){str_value+=a;}//tab和回车 for(unsigned char a(32);a!=128;++a){str_value+=a;}//空格到~后面的那个字符~ str_value+="\n";//回车避免字符别全在一行 //生成word字符//194-223(128-191)//双字节范围 for(unsigned char a(194);a!=224;++a){//第一字节范围C2-DF for(unsigned char b(128);b!=192;++b){//最后字节范围80-BF str_value+=a;str_value+=b;} str_value+="\n";}//回车避免字符别全在一行 //1生成三字节的字符//224,160-191(128-191)//三字节范围 for(unsigned char a(224);a!=225;++a){ for(unsigned char b(160);b!=192;++b){ for(unsigned char c(128);c!=192;++c){ str_value+=a;str_value+=b;str_value+=c;} str_value+="\n";}}//回车避免字符别全在一行 //2生成三字节的字符//225-236(128-191*2) for(unsigned char a(225);a!=237;++a){ for(unsigned char b(128);b!=192;++b){ for(unsigned char c(128);c!=192;++c){ str_value+=a;str_value+=b;str_value+=c;} str_value+="\n";}}//回车避免字符别全在一行 //3生成三字节的字符//237,128-159(128-191) for(unsigned char a(237);a!=238;++a){ for(unsigned char b(128);b!=160;++b){ for(unsigned char c(128);c!=192;++c){ str_value+=a;str_value+=b;str_value+=c;} str_value+="\n";}}//回车避免字符别全在一行 //4生成三字节的字符//238-239(128-191*2) for(unsigned char a(238);a!=240;++a){ for(unsigned char b(128);b!=192;++b){ for(unsigned char c(128);c!=192;++c){ str_value+=a;str_value+=b;str_value+=c;} str_value+="\n";}}//回车避免字符别全在一行 //1生成double word字符//240,144-191(128-191*2) for(unsigned char a(240);a!=241;++a){//四字节范围 for(unsigned char b(144);b!=192;++b){ for(unsigned char c(128);c!=192;++c){ for(unsigned char d(128);d!=192;++d){ str_value+=a;str_value+=b;str_value+=c;str_value+=d;} str_value+="\n";}}} //2生成double word字符//241-243(128-191*3) for(unsigned char a(241);a!=244;++a){ for(unsigned char b(128);b!=192;++b){ for(unsigned char c(128);c!=192;++c){ for(unsigned char d(128);d!=192;++d){ str_value+=a;str_value+=b;str_value+=c;str_value+=d;} str_value+="\n";}}} //3生成double word字符//244,128-143(128-191*2) for(unsigned char a(244);a!=245;++a){ for(unsigned char b(128);b!=144;++b){ for(unsigned char c(128);c!=192;++c){ for(unsigned char d(128);d!=192;++d){ str_value+=a;str_value+=b;str_value+=c;str_value+=d;} str_value+="\n";}}} cout < //下方为原帖内容 //状态:未完全验证仅供思路参考欢迎拍砖
//编译器:g++ 4.2.1 20070719 通过
//系统:freebsd 7.1r p2
//其他:系统编码设置为zh_CN.UTF-8
//运行方法:g++ -o sc sc.cpp ; ./sc > temp.text
//相关知识参见:
//
//
//需要的两个头文件
#include int main(){
string str_value(""); //生成部分ascii码 for(unsigned char a(32);a!=128;++a){//空格到~ str_value+=a;}
str_value+="\n";//回车避免字符别全在一行 //生成word字符 for(unsigned char a(194);a!=224;++a){//第一字节范围C2-DF for(unsigned char b(128);b!=192;++b){//最后字节范围80-BF //生成三字节的字符 for(unsigned char a(224);a!=240;++a){//第一字节范围E0-EF //生成double word字符,不过好像用不上的样子,先注释掉吧以后可能用到
for(unsigned char a(240);a!=245;++a){ return 0;}
|
//utf-8全字符输出v1.0 |
//utf-8全字符输出v1.0 |
sss |
//utf-8全字符输出v1.0 |