• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

C++ Unicode(char*)转UTF8的代码

OC/C/C++ 水墨上仙 2685次浏览

C++ Unicode(char*)转UTF8的代码
1.这里只是单个unicode字符的转换,字符串转换的话需要遍历整个字符串,可用std::string的append添加.
2.如果只是2字节宽的unicode,只需要unicode_char_length = 2就行了。
转自:http://blog.csdn.net/infoworld/article/details/8454175

void OneUnicode2UTF8(const char* unicode_char,size_t unicode_char_length,
			char* utf_char)
{
	//unicode: 0x192->110010010 ,utf8:0xC692->1100011010010010
	int value = 0;
	memcpy(&value,unicode_char,unicode_char_length);
	
	if (value >= 0x0000 && value <= 0x007F)  
	{  
		utf_char[0] = unicode_char[0];
	}  
	else if (value >= 0x0080 && value <= 0x07FF)  
	{  
		utf_char[0] = ((value >> 6) | 0xC0);
		utf_char[1] = ((value & 0x3F) | 0x80);
	}  
	else if (value >= 0x0800 && value <= 0xFFFF)  
	{  
		utf_char[0] = ((value >> 12) | 0xE0);
		utf_char[1] = ((value >> 6 & 0x3F) | 0x80);
		utf_char[2] = ((value & 0x3F) | 0x80);
	}
	else if (value >= 0x10000 && value <= 0x10FFFF)  
	{  
		utf_char[0] = (value >> 18 | 0xF0);
		utf_char[1] = ((value >> 12 & 0x3F) | 0x80);
		utf_char[2] = ((value >> 6 & 0x3F) | 0x80);
		utf_char[3] = ((value & 0x3F) | 0x80);
	}
	else
	{
		cerr << "value too big." << endl; 
		assert(0);
	}
}


喜欢 (0)
加载中……