重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
你说的好像是不对。这是把ascii马用16进制表示。并不是utf8,我不知道你要干什么,不过我猜你做的是web应用,需要把特殊字符转化成%16进制格式,如果你的系统真是utf8的话,我想你应该这么做
成都创新互联公司2013年成立,公司自成立以来始终致力于为企业提供官网建设、移动互联网业务开发(小程序制作、手机网站建设、成都app软件开发公司等),并且包含互联网基础服务(域名、主机服务、企业邮箱、网络营销等)应用服务;以先进完善的建站体系及不断开拓创新的精神理念,帮助企业客户实现互联网业务,严格把控项目进度与质量监控加上过硬的技术实力获得客户的一致赞誉。
用iconv_open和iconv,先把字符串变成utf-8。然后在把这个串中的每个字节都变成16进制加%的格式。
如果你只是需要16进制转换,那就简单了。把没有字符的ascii拿出来,sprintf(%02x)成16进制,在合起来就成。
#includestdio.h
#includewindows.h
void GetUtf8(unsigned short uni)
{
unsigned char utf_8[3];
utf_8[0]=(0xe4) | ((uni 0xf000)12);//相当于把二进制1110右移12位
utf_8[1]=(0x26) | ((uni 0x0fc0)6); //相当于把二进制10右移16位
utf_8[2]=(0x26) | (uni 0x003f); //相当于取二进制低6位
printf("UTF-8编码的第一个字节为0x%.2x\n",utf_8[0]);
printf("UTF-8编码的第一个字节为0x%.2x\n",utf_8[1]);
printf("UTF-8编码的第一个字节为0x%.2x\n",utf_8[2]);
}
void main()
{
char a[3];
wchar_t str;
printf("输入一个汉字:\n");
gets(a);
MultiByteToWideChar(CP_ACP, 0, a, -1, str, 1);
printf("%s", a);
printf("字Unicode编码为%x\n",(unsigned short)str);
GetUtf8((unsigned short)str);
}
普通sting类型 转UTF-8编码格式字符串std::string ofDewarServer::string_To_UTF8(const std::string str)
{
int nwLen = ::MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, NULL, 0);
wchar_t * pwBuf = new wchar_t[nwLen + 1];//一定要加1,不然会出现尾巴
ZeroMemory(pwBuf, nwLen * 2 + 2);
::MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.length(), pwBuf, nwLen);
int nLen = ::WideCharToMultiByte(CP_UTF8, 0, pwBuf, -1, NULL, NULL, NULL, NULL);
char * pBuf = new char[nLen + 1];
ZeroMemory(pBuf, nLen + 1);
::WideCharToMultiByte(CP_UTF8, 0, pwBuf, nwLen, pBuf, nLen, NULL, NULL);
std::string retStr(pBuf);
delete []pwBuf;
delete []pBuf;
pwBuf = NULL;
pBuf = NULL;
return retStr;
}
其实 linux 和 windows 的系统函数都是C函数,并且提供了GB2312toUTF-8的函数,所以C语言是可以实现转码的。以下是windows的例子:int num = ::MultiByteToWideChar(CP_ACP, 0, "你好", -1, NULL, 0);wchar_t* m_arrayShort = new wchar_t[num];::MultiByteToWideChar(CP_ACP, 0, "你好", -1, m_arrayShort, num); int len = ::WideCharToMultiByte (CP_UTF8, 0, (LPCWSTR)m_arrayShort, num, 0, 0, NULL, NULL);char *tmpPT = new char[len+1];::WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR)m_arrayShort, num, tmpPT, len, NULL, NULL);tmpPT[len] = 0;
哎呀。都是干嘛的啊?很简单的啊。
你用二进制的方式写文件,不就行了啊。
写文件的时候,把要写入的数据,用一个函数转换程utf8编码的数据,就ok了啊
虽然我没在linux下编过,但每个系统,每个开发环境,肯定提供了
编码转换的函数库
的啊