青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

doing5552

記錄每日點滴,不枉人生一世

  C++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
  73 Posts :: 0 Stories :: 94 Comments :: 0 Trackbacks

公告

常用鏈接

留言簿(24)

我參與的團隊

最新隨筆

搜索

  •  

積分與排名

  • 積分 - 456154
  • 排名 - 49

最新隨筆

最新評論

閱讀排行榜

評論排行榜

使用C++標準庫的iostream,可以方便地將控制臺、文件、字符串以及其它可擴充的外部表示作為流來處理,但要處理中文,卻會碰到很多問題。本人原來沒怎么用過這個iostream,這幾天嘗試用這個寫點東西,一會兒不能輸出中文,一會兒不支持中文文件名的,搞得頭大。網(wǎng)上搜了搜,沒有發(fā)現(xiàn)適用于所有情況的解決方案。不過后來自己經(jīng)過多次測試,基本解決了這些問題,現(xiàn)在寫成文字作為一個總結(jié),也供碰到同樣問題的朋友參考。關(guān)于C語言中的 printf和wprintf的中文輸出,本文也進行了探討。

  需要說明的是,我的開發(fā)環(huán)境是VS 2005(標準庫當(dāng)然也是微軟實現(xiàn)的),不保證其它環(huán)境下是相同的效果。

  1、cout和wcout

  在缺省的C locale下,cout可以直接輸出中文,但對于wcout卻不行(至少VS 2005下不行)。對于wcout,需要將其locale設(shè)為本地語言才能輸出中文:

  wcout.imbue(locale(locale(),"",LC_CTYPE));  // ①

  也有人用如下語句的,但這會改變wcout的所有l(wèi)ocale設(shè)置,比如數(shù)字“1234”會輸出為“1,234”。

  wcout.imbue(locale(""));

  2、ofstream和wofstream

  在缺省的C locale下,ofstream能正確輸出中文到文件中,但不支持中文文件名;wofstream支持中文文件名,但不能向文件中輸出中文。要解決這個問題,需要在打開文件之前將全局locale設(shè)為本地語言。將全局locale設(shè)為本地語言后,ofstream和wofstream的問題都解決了,但 cout和wcout卻不能輸出中文了。要讓cout和wcout輸出中文,需要將全局locale恢復(fù)原來的設(shè)置,如下所示:

  locale &loc=locale::global(locale(locale(),"",LC_CTYPE));  // ②

  ofstream ofs("ofs測試.txt");

  wofstream wofs(L"wofs測試.txt");

  locale::global(loc);  // ③

  ofs<<"test測試"<<1234<<endl;

  wofs<<L"Another test還是測試"<<1234<<endl;

  3、printf和wprintf

  加上這兩位C語言中的老兄,問題更加復(fù)雜。考慮如下語句(注意s的大小寫):

  printf("%s", "multibyte中文\n");  // ④

  printf("%S", L"unicode中文\n");  // ⑤

  wprintf(L"%S", "multibyte中文\n");  // ⑥

  wprintf(L"%s", L"unicode中文\n");  // ⑦

  缺省情況下,⑤、⑦兩條語句不能輸出中文,這兩條語句中字符串的形式是unicode形式的。如果在所有輸出語句之前加上如下語句將C語言的全局locale設(shè)置為本地語言(C語言中只有全局locale)就可以正常輸出了:

  setlocale(LC_CTYPE, "");  // ⑧

  但這會導(dǎo)致cout和wcout不能輸出中文(汗,的確麻煩),將C語言的全局locale恢復(fù)后cout和wcout就正常了,如下所示:

  setlocale(LC_CTYPE, "C");  // ⑨

  但恢復(fù)后,printf和wprintf輸出Unicode文本又不正常了(輸出MultiByte文本總是正常的)。總不能每寫一個 printf/wprintf就設(shè)置一次然后再恢復(fù)一次吧?所以,建議不要混用iostream和printf/wprintf,實在要混用,那就讓 printf/wprintf只輸出MultiByte字符串,這樣不需要調(diào)用setlocale(),也就不會影響到cout和wcout.

  總結(jié)

  總之,用iostream、printf/wprintf輸出中文,有點麻煩。概括起來要點如下:

  ·如果要用wcout,需要在使用之前按語句①將其locale設(shè)置為本地語言;

  ·如果要用ofstream或wofstream,要在打開文件之前按語句②將全局locale設(shè)為本地語言并保存初始的全局locale.然后在打開文件之后,按語句③將全局locale恢復(fù)為初始值;

  ·不要混用iostream和printf/wprintf.如果要混用,只用printf/wprintf輸出MultiByte字符串;

  ·單獨使用printf/wprintf時,如果要輸出Unicode字符串,需要按語句⑧設(shè)置C語言的全局locale.如果只輸出MultiByte字符串,則不需設(shè)置。

posted on 2010-07-25 21:17 doing5552 閱讀(515) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产欧美精品日韩精品| 亚洲麻豆av| 亚洲毛片在线| 亚洲黄网站在线观看| 国内激情久久| 亚洲国产精品视频| 99国产精品久久久久老师| 一区二区三区国产在线| 亚洲一二区在线| 久久狠狠婷婷| 毛片精品免费在线观看| 亚洲国产精品久久人人爱蜜臀| 快射av在线播放一区| 欧美成人四级电影| 99在线热播精品免费99热| 午夜精品久久久久| 久久婷婷麻豆| 国产精品porn| 黄色在线一区| 中文亚洲视频在线| 久久永久免费| 在线亚洲免费视频| 久久久久久亚洲综合影院红桃| 久久全球大尺度高清视频| 老司机免费视频久久| 91久久精品www人人做人人爽| 一区二区三区视频在线| 久久久久久一区二区三区| 欧美日韩国产成人在线观看| 国产亚洲免费的视频看| 亚洲美女啪啪| 久久精品一区二区三区不卡| 亚洲精品免费一二三区| 久久av老司机精品网站导航| 欧美日韩国产综合久久| 在线播放国产一区中文字幕剧情欧美| aⅴ色国产欧美| 蜜臀av国产精品久久久久| 亚洲一区二区三区免费视频| 免费观看日韩| 一区二区三区在线视频播放| 亚洲欧美久久久| 欧美激情亚洲综合一区| 欧美中文字幕在线视频| 国产精品日韩电影| 日韩一级在线观看| 免费看亚洲片| 亚洲男人的天堂在线| 欧美激情亚洲精品| 国内精品久久久久久久影视蜜臀| 亚洲视频香蕉人妖| 免费欧美日韩| 亚洲欧美制服另类日韩| 国产精品久久久久三级| 99精品免费网| 日韩一区二区免费高清| 蜜桃av综合| **性色生活片久久毛片| 羞羞漫画18久久大片| 亚洲婷婷在线| 国产精品亚洲综合一区在线观看| 日韩网站在线观看| 亚洲第一天堂av| 久久综合久久综合久久| 国模叶桐国产精品一区| 午夜精品久久久99热福利| 日韩亚洲综合在线| 欧美精品一区二区三区一线天视频| 亚洲高清一区二| 美女福利精品视频| 麻豆成人综合网| 亚洲精品在线一区二区| 亚洲欧洲日产国产综合网| 女人色偷偷aa久久天堂| 91久久在线播放| 亚洲黄色av| 欧美色精品在线视频| 一本色道久久综合亚洲精品按摩| 亚洲夫妻自拍| 欧美精品色一区二区三区| 亚洲女人av| 欧美一级理论片| 亚洲大胆人体在线| 亚洲网站在线播放| 亚洲欧美一区二区三区在线| 亚洲特黄一级片| 国产精品亚洲激情| 久久一区视频| 欧美成人在线影院| 正在播放亚洲| 亚洲欧美国产77777| 国产亚洲综合性久久久影院| 久久久夜夜夜| 欧美日韩专区| 久久精品观看| 欧美va亚洲va日韩∨a综合色| 亚洲精品中文字幕在线| 一本久久综合| 亚洲第一黄色| 亚洲乱码国产乱码精品精 | 久久精品国产亚洲a| 久久精品亚洲一区| 99精品欧美一区二区三区综合在线 | 欧美韩日一区二区三区| 欧美成人一区在线| 亚洲欧美日韩精品综合在线观看| 欧美一区亚洲| 亚洲网友自拍| 美女精品在线| 久久福利精品| 欧美午夜精品理论片a级大开眼界| 久久久久久久久综合| 欧美日韩hd| 欧美mv日韩mv国产网站| 欧美视频二区36p| 免费中文字幕日韩欧美| 国产精品护士白丝一区av| 你懂的国产精品永久在线| 欧美日韩在线大尺度| 美女主播一区| 国产日产高清欧美一区二区三区| 欧美国产日韩亚洲一区| 国产精品美女久久久免费| 亚洲电影在线看| 国内揄拍国内精品久久| 一本色道久久加勒比88综合| 亚洲国产精品ⅴa在线观看| 亚洲专区在线| 亚洲午夜一级| 欧美日韩国产大片| 欧美激情一区二区三区在线| 国产日韩亚洲欧美精品| 在线视频欧美日韩| 亚洲乱码久久| 欧美va天堂va视频va在线| 久久亚洲精品伦理| 国产精品一区二区久久| 亚洲免费观看在线观看| 日韩视频二区| 欧美激情1区2区3区| 亚洲东热激情| 亚洲美女免费视频| 欧美激情精品久久久久久蜜臀| 亚洲精选视频在线| 欧美激情视频在线免费观看 欧美视频免费一 | 久久成人免费日本黄色| 国产精品成人久久久久| 日韩视频中午一区| 亚洲精品乱码| 欧美成人精品一区二区| 亚洲第一精品在线| 亚洲理伦在线| 欧美日韩免费视频| 国产精品99久久99久久久二8| 亚洲少妇中出一区| 国产精品地址| 午夜久久久久久| 久久香蕉国产线看观看av| 国产一区二区在线观看免费| 欧美一区二区性| 欧美成人精品在线播放| 亚洲日本黄色| 国产精品盗摄久久久| 性欧美精品高清| 男人的天堂成人在线| 99在线观看免费视频精品观看| 欧美视频不卡中文| 欧美中文在线观看| 亚洲黄一区二区三区| 一区二区三区精品| 国产精品捆绑调教| 久久av红桃一区二区小说| 欧美mv日韩mv国产网站| avtt综合网| 好吊一区二区三区| 欧美国产精品va在线观看| 亚洲免费黄色| 久久深夜福利免费观看| 亚洲精品中文字幕有码专区| 亚洲大胆女人| 香蕉成人啪国产精品视频综合网| 狠狠入ady亚洲精品| 欧美国产视频日韩| 性色av一区二区三区在线观看| 看片网站欧美日韩| 亚洲小说区图片区| 尤物yw午夜国产精品视频| 欧美理论片在线观看| 午夜精品三级视频福利| 91久久在线| 久久久久久久97| 亚洲欧美日韩直播| 日韩午夜av电影| 一区二区三区在线不卡| 欧美日韩一卡| 乱中年女人伦av一区二区| 亚洲欧美国产一区二区三区| 欧美国产日韩一区| 久久米奇亚洲| 欧美一区二区三区免费看 |