你說的好像是不對(duì)。這是把a(bǔ)scii馬用16進(jìn)制表示。并不是utf8,我不知道你要干什么,不過我猜你做的是web應(yīng)用,需要把特殊字符轉(zhuǎn)化成%16進(jìn)制格式,如果你的系統(tǒng)真是utf8的話,我想你應(yīng)該這么做
成都創(chuàng)新互聯(lián)公司2013年成立,公司自成立以來始終致力于為企業(yè)提供官網(wǎng)建設(shè)、移動(dòng)互聯(lián)網(wǎng)業(yè)務(wù)開發(fā)(小程序制作、手機(jī)網(wǎng)站建設(shè)、成都app軟件開發(fā)公司等),并且包含互聯(lián)網(wǎng)基礎(chǔ)服務(wù)(域名、主機(jī)服務(wù)、企業(yè)郵箱、網(wǎng)絡(luò)營(yíng)銷等)應(yīng)用服務(wù);以先進(jìn)完善的建站體系及不斷開拓創(chuàng)新的精神理念,幫助企業(yè)客戶實(shí)現(xiàn)互聯(lián)網(wǎng)業(yè)務(wù),嚴(yán)格把控項(xiàng)目進(jìn)度與質(zhì)量監(jiān)控加上過硬的技術(shù)實(shí)力獲得客戶的一致贊譽(yù)。
用iconv_open和iconv,先把字符串變成utf-8。然后在把這個(gè)串中的每個(gè)字節(jié)都變成16進(jìn)制加%的格式。
如果你只是需要16進(jìn)制轉(zhuǎn)換,那就簡(jiǎn)單了。把沒有字符的ascii拿出來,sprintf(%02x)成16進(jìn)制,在合起來就成。
#includestdio.h?
#includewindows.h?
void?GetUtf8(unsigned?short?uni)??
{??
unsigned?char?utf_8[3];??
utf_8[0]=(0xe4)?|?((uni??0xf000)12);//相當(dāng)于把二進(jìn)制1110右移12位??
utf_8[1]=(0x26)?|?((uni??0x0fc0)6);?//相當(dāng)于把二進(jìn)制10右移16位??
utf_8[2]=(0x26)?|?(uni??0x003f);??????//相當(dāng)于取二進(jìn)制低6位??
printf("UTF-8編碼的第一個(gè)字節(jié)為0x%.2x\n",utf_8[0]);??
printf("UTF-8編碼的第一個(gè)字節(jié)為0x%.2x\n",utf_8[1]);??
printf("UTF-8編碼的第一個(gè)字節(jié)為0x%.2x\n",utf_8[2]);??
}??
void?main()??
{??
char?a[3];
wchar_t?str;
printf("輸入一個(gè)漢字:\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類型 轉(zhuǎn)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,不然會(huì)出現(xiàn)尾巴
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;
}
其實(shí) linux 和 windows 的系統(tǒng)函數(shù)都是C函數(shù),并且提供了GB2312toUTF-8的函數(shù),所以C語言是可以實(shí)現(xiàn)轉(zhuǎn)碼的。以下是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;
哎呀。都是干嘛的???很簡(jiǎn)單的啊。
你用二進(jìn)制的方式寫文件,不就行了啊。
寫文件的時(shí)候,把要寫入的數(shù)據(jù),用一個(gè)函數(shù)轉(zhuǎn)換程utf8編碼的數(shù)據(jù),就ok了啊
雖然我沒在linux下編過,但每個(gè)系統(tǒng),每個(gè)開發(fā)環(huán)境,肯定提供了
編碼轉(zhuǎn)換的函數(shù)庫
的啊
網(wǎng)站標(biāo)題:c語言u(píng)tf8編碼函數(shù),中文轉(zhuǎn)utf8編碼 c語言
當(dāng)前URL:http://www.muchs.cn/article2/hcppic.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、建站公司、小程序開發(fā)、域名注冊(cè)、網(wǎng)站維護(hù)、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)