亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++使用WideCharToMultiByte函數生成UTF-8編碼文件的方法

2020-05-23 14:02:32
字體:
來源:轉載
供稿:網友

WideCharToMultiByte函數映射一個unicode字符串到一個多字節字符串。

函數原型:

int WideCharToMultiByte
  • UINT CodePage, //指定執行轉換的代碼頁
  • DWORD dwFlags, //允許你進行額外的控制,它會影響使用了讀音符號(比如重音)的字符
  • LPCWSTR lpWideCharStr, //指定要轉換為寬字節字符串的緩沖區
  • int cchWideChar, //指定由參數lpWideCharStr指向的緩沖區的字符個數
  • LPSTR lpMultiByteStr, //指向接收被轉換字符串的緩沖區
  • int cchMultiByte, //指定由參數lpMultiByteStr指向的緩沖區最大值
  • LPCSTR lpDefaultChar, //遇到一個不能轉換的寬字符,函數便會使用pDefaultChar參數指向的字符
  • LPBOOL pfUsedDefaultChar //至少有一個字符不能轉換為其多字節形式,函數就會把這個變量設為TRUE

參數:
CodePage:指定執行轉換的代碼頁,這個參數可以為系統已安裝或有效的任何代碼頁所給定的值。你也可以指定其為下面的任意一值:

  • CP_ACP:ANSI代碼頁;CP_MACCP:Macintosh代碼頁;CP_OEMCP:OEM代碼頁;
  • CP_SYMBOL:符號代碼頁(42);CP_THREAD_ACP:當前線程ANSI代碼頁;
  • CP_UTF7:使用UTF-7轉換;CP_UTF8:使用UTF-8轉換。

相關變量

  • lpWideCharStr:指向將被轉換的unicode字符串。
  • cchWideChar:指定由參數lpWideCharStr指向的緩沖區的字符個數。如果這個值為-1,字符串將被設定為以NULL為結束符的字符串,并且自動計算長度。
  • lpMultiByteStr:指向接收被轉換字符串的緩沖區。
  • cchMultiByte:指定由參數lpMultiByteStr指向的緩沖區最大值(用字節來計量)。若此值為零,函數返回lpMultiByteStr指向的目標緩沖區所必需的字節數,在這種情況下,lpMultiByteStr參數通常為NULL。
  • lpDefaultChar和pfUsedDefaultChar:只有當WideCharToMultiByte函數遇到一個寬字節字符,而該字符在uCodePage參數標識的代碼頁中并沒有它的表示法時,WideCharToMultiByte函數才使用這兩個參數。如果寬字節字符不能被轉換,該函數便使用lpDefaultChar參數指向的字符。如果該參數是NULL(這是大多數情況下的參數值),那么該函數使用系統的默認字符。該默認字符通常是個問號。這對于文件名來說是危險的,因為問號是個通配符。pfUsedDefaultChar參數指向一個布爾變量,如果Unicode字符串中至少有一個字符不能轉換成等價多字節字符,那么函數就將該變量置為TRUE。如果所有字符均被成功地轉換,那么該函數就將該變量置為FALSE。當函數返回以便檢查寬字節字符串是否被成功地轉換后,可以測試該變量。
  • 返回值:如果函數運行成功,并且cchMultiByte不為零,返回值是由 lpMultiByteStr指向的緩沖區中寫入的字節數;如果函數運行成功,并且cchMultiByte為零,返回值是接收到待轉換字符串的緩沖區所必需的字節數。如果函數運行失敗,返回值為零。若想獲得更多錯誤信息,請調用GetLastError函數。它可以返回下面所列錯誤代碼:
  • ERROR_INSUFFICIENT_BJFFER;ERROR_INVALID_FLAGS;
  • ERROR_INVALID_PARAMETER;ERROR_NO_UNICODE_TRANSLATION。
  • 注意:指針lpMultiByteStr和lpWideCharStr必須不一樣。如果一樣,函數將失敗,GetLastError將返回ERROR_INVALID_PARAMETER的值。
  • Windows CE:不支持參數CodePage中的CP_UTF7和CP_UTF8的值,以及參數dwFlags中的WC_NO_BEST_FIT_CHARS值。

生成utf-8編碼的文件
步驟如下:
1. 首先要寫一個BOM頭。UTF-8文件一般是要這個頭的,當然也可以沒有。
2. 將要生成的字符先使用寬字符格式生成,然后調用WideCharToMultiByte轉為utf-8編碼,寫入文件。

例子如下:

FILE * pFile = fopen("d://a.txt", "w");   char szBOM[4] = {(char)0xEF, (char)0xBB, (char)0xBF, 0};   fprintf(pFile, "%s", szBOM);      wchar_t chNum[11] = L"零壹貳叁肆伍陸柒捌玖";   wchar_t chNum2[10] = L"億千百拾萬千百拾個";   char sz[10] = "112304823";      wchar_t result[32] = L"";      int offset = 0;   for(int i = 0; i < strlen(sz); ++ i)   {     char c = sz[i];          wchar_t w1 = chNum[ c - '0'];     wchar_t w2 = chNum2[i];     swprintf(result + offset, L"%c%c", w1, w2);     offset += 2;   }   char szChar[64] = "";   ::WideCharToMultiByte(CP_UTF8, 0, result, wcslen(result), szChar, 64, 0, 0);   fprintf(pFile, "%s", szChar);   fclose(pFile); 

注意的是,當使用wchar_t而不再是char時,所有的字符串操作函數都需要時w系列的,例如wcslen、swprintf


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久99精品久久久久久青青91| 欧美视频在线观看 亚洲欧| 亚洲女人天堂色在线7777| 日韩在线高清视频| 国产精品久久久久久久久影视| 欧美国产极速在线| 97国产真实伦对白精彩视频8| 亚洲国产成人精品女人久久久| 在线播放精品一区二区三区| 精品一区精品二区| 精品国内亚洲在观看18黄| 日韩黄在线观看| 一区二区亚洲欧洲国产日韩| 一区二区亚洲精品国产| 亚洲激情在线观看视频免费| 91精品视频在线播放| 国产精品第100页| 国产日韩欧美日韩| 在线成人一区二区| 国产成一区二区| 亚洲新声在线观看| 欧美激情国内偷拍| 国产91精品久久久| 欧美高清性猛交| 中文字幕免费精品一区高清| 久久精品电影一区二区| 国模私拍一区二区三区| 国产成人高潮免费观看精品| 久久精品久久精品亚洲人| 91福利视频在线观看| 97国产suv精品一区二区62| 国产精品视频网| 日韩男女性生活视频| 国产91ⅴ在线精品免费观看| 一区二区三区视频免费| 精品福利视频导航| 亚洲xxxx视频| 亚洲天堂免费在线| 奇米影视亚洲狠狠色| 国产亚洲美女精品久久久| 一区二区三区四区视频| 国产欧美va欧美va香蕉在| 久久久久久久999| 亚洲人成网站999久久久综合| 97超级碰碰碰| 亚洲自拍小视频免费观看| 日韩在线观看免费全集电视剧网站| 亚洲美女黄色片| 亚洲肉体裸体xxxx137| 国产婷婷97碰碰久久人人蜜臀| 国产午夜精品全部视频播放| 富二代精品短视频| 日韩电影在线观看中文字幕| 国产精品露脸av在线| 日韩成人在线观看| 欧美亚洲另类在线| 欧美老妇交乱视频| 视频在线观看一区二区| 亚洲理论在线a中文字幕| 国模吧一区二区三区| 国产精品美女网站| 久久久精品视频在线观看| 久久精品中文字幕电影| 欧美日韩精品中文字幕| 成人综合国产精品| 国产精品视频一区二区高潮| 欧美另类老肥妇| 久久综合久中文字幕青草| 亚洲欧美激情另类校园| 日韩av有码在线| 亚洲人成在线一二| 中文字幕在线看视频国产欧美在线看完整| 成人有码在线播放| 一区二区三区视频免费| 色偷偷噜噜噜亚洲男人的天堂| 国产一区二区三区毛片| 久久久久久高潮国产精品视| 成人网欧美在线视频| 亚洲免费福利视频| 少妇高潮久久久久久潘金莲| 亚洲人成伊人成综合网久久久| 亚洲免费视频网站| 免费91麻豆精品国产自产在线观看| 久久国产精品久久久久| 日本精品视频网站| 国产视频精品免费播放| 欧美日韩国产丝袜美女| 一区二区亚洲精品国产| 久久久精品2019中文字幕神马| 亚洲欧洲在线免费| 精品国产拍在线观看| 亚洲韩国日本中文字幕| 久久99亚洲热视| 久久久97精品| 日韩亚洲欧美中文在线| 亚洲视屏在线播放| 555www成人网| 日韩电影免费观看中文字幕| 亚洲国产91精品在线观看| 欧美激情一二区| 97av视频在线| 最近2019免费中文字幕视频三| 4444欧美成人kkkk| 亚洲成人精品久久| 国产精品一区二区久久久久| 午夜精品久久久久久久男人的天堂| 国产精品99蜜臀久久不卡二区| 一区二区三区视频观看| 姬川优奈aav一区二区| 日韩久久精品成人| 欧美另类极品videosbestfree| 热99精品里视频精品| 最近2019好看的中文字幕免费| 精品视频久久久久久久| 欧美成人免费在线观看| 成人精品视频在线| 亚洲大胆人体av| 欧美精品一区二区三区国产精品| 国产日韩欧美在线看| 国产精品678| 国产日产久久高清欧美一区| 国产精品国产三级国产aⅴ浪潮| 中文字幕成人精品久久不卡| 亚洲人成毛片在线播放| 国产精品久久久久久五月尺| 高清亚洲成在人网站天堂| 欧美在线视频播放| 精品视频在线播放免| 国产精品成熟老女人| 91av在线不卡| 久久免费国产精品1| 日韩免费在线观看视频| 国产激情视频一区| 韩国视频理论视频久久| 欧美在线视频免费| 77777亚洲午夜久久多人| 日韩视频在线观看免费| 亚洲欧美日韩一区在线| 亚洲欧美自拍一区| 国产精品亚洲自拍| 日本不卡免费高清视频| 亚洲午夜精品久久久久久久久久久久| 色噜噜狠狠狠综合曰曰曰| 亚洲精品视频在线观看视频| 欧美乱大交xxxxx另类电影| 国产乱肥老妇国产一区二| 91国产视频在线播放| 欧洲亚洲免费视频| 欧美日韩在线视频一区二区| 亚洲精品成人久久| 欧美成人在线免费视频| 欧美一级淫片丝袜脚交| 中文字幕亚洲在线| 国产精品黄页免费高清在线观看| 91精品国产高清自在线| 国产成人aa精品一区在线播放| 亚洲男人天堂2019| 91国在线精品国内播放| 欧美激情第6页| 日韩成人激情影院| 久久国产精品偷| 久久影视免费观看| 狠狠爱在线视频一区| 久久久久久com|