• <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>

            大龍的博客

            常用鏈接

            統(tǒng)計(jì)

            最新評(píng)論

            setlocale同mbstowcs函數(shù)的關(guān)系 --- 轉(zhuǎn)

            程序中,如果要將ASCII碼字符串轉(zhuǎn)換為寬字符(Unicode),可以利用標(biāo)準(zhǔn)C的mbstowcs函數(shù)。

            微軟在MSDN中有示例,如下:

             

            然而,這段代碼在處理含有漢字的字符串時(shí)就會(huì)出現(xiàn)問(wèn)題。比如將:

            wchar_t *pwchello = L"Hi";  替換為wchar_t *pwchello = L"你好"; 

            查看運(yùn)行結(jié)果就會(huì)發(fā)現(xiàn),mbstowcs函數(shù)將漢字視作兩個(gè)ASCII字符,這樣一個(gè)漢字就變成了兩個(gè)wchar_t。原因是mbstowcs需要我們明確的告訴他要轉(zhuǎn)換的字符語(yǔ)言。這里需要使用setlocale函數(shù)。在網(wǎng)上發(fā)現(xiàn)不少人遇到這個(gè)問(wèn)題,微軟的MSDN也是,為什么這里就不說(shuō)明一下呢?

            只要在調(diào)用前,使用setlocale(LC_ALL, "chs")設(shè)置,結(jié)果就正常了。

            我測(cè)試在英文Vista操作系統(tǒng)內(nèi),Visual Studio 2008下setlocale(LC_ALL, "chs")可以執(zhí)行成功。

            但是在Borland C++Builder 6、CodeGear RAD Studio 2009下執(zhí)行都失敗,BCB提供的幫助文件內(nèi)也未找到,反復(fù)測(cè)試使用setlocale(LC_ALL, "Chinese (Simplified)_People's Republic of China")可以奏效(這么大一個(gè)長(zhǎng)串,BCB對(duì)搞中文編碼的程序員也夠狠)。

            更諷刺的是,在BCB內(nèi)使用setlocale(LC_ALL, "jpn"),或"cht"都可以成功。唯獨(dú)就不支持"chs",對(duì)BCB的做法徹底無(wú)語(yǔ)了。我相信在大多數(shù)unix或linux上也還是支持"chs"的。如果有時(shí)間,我再搞一個(gè)MinGW試試看。

            另外如果程序運(yùn)行在非中文操作系統(tǒng)內(nèi),使用setlocale修改運(yùn)行時(shí)字符集環(huán)境,會(huì)影響當(dāng)前應(yīng)用程序的編碼方式,因此使用前需要保留一下老的編碼,使用后再恢復(fù)。

             

            for 在linux上coding的兄弟們,locale別名表大概在 /usr/lib/X11/locale/locale.alias

            posted on 2010-05-25 14:29 大龍 閱讀(2782) 評(píng)論(1)  編輯 收藏 引用

            評(píng)論

            # re: setlocale同mbstowcs函數(shù)的關(guān)系 --- 轉(zhuǎn) 2011-04-09 19:23 pointma

            太謝謝老大了!!!
            星期六不用加班加到通宵就是因?yàn)槔洗蟮倪@篇文章!!!

            叩頭!!!
            老大是好人!!
            (好人你妹啊!!!誰(shuí)收你的好人卡啊!!)

              回復(fù)  更多評(píng)論   


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


            中文国产成人精品久久不卡| 国产精品99久久精品爆乳| 久久亚洲国产精品五月天婷| 欧美精品丝袜久久久中文字幕| 久久乐国产精品亚洲综合| 色老头网站久久网| 国产精品国色综合久久| 亚洲色欲久久久久综合网| 亚洲AV无码久久精品成人 | 国内精品伊人久久久久777| 狠色狠色狠狠色综合久久| 久久精品99久久香蕉国产色戒| 日日狠狠久久偷偷色综合96蜜桃| 久久精品国产69国产精品亚洲| 久久免费视频1| 久久天天躁狠狠躁夜夜avapp| 久久精品国产一区二区| 久久精品无码一区二区三区日韩 | 久久久久久一区国产精品| 99久久久国产精品免费无卡顿| 国产aⅴ激情无码久久| 日韩电影久久久被窝网| 久久精品国产99国产精品亚洲 | 狠狠色丁香久久婷婷综合图片| 色婷婷综合久久久久中文| 99精品久久精品| 久久av高潮av无码av喷吹| 精品人妻伦九区久久AAA片69| 中文字幕乱码人妻无码久久| 久久乐国产精品亚洲综合| 久久亚洲精品无码VA大香大香| 亚洲欧美成人综合久久久 | 久久久久国产精品| 色狠狠久久综合网| 伊人色综合久久| 热re99久久精品国99热| 亚洲午夜福利精品久久| 99热热久久这里只有精品68| 久久99国产精品尤物| 久久人人妻人人爽人人爽| 精品国产乱码久久久久软件|