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

yehao's Blog

解決為什么wcout不能輸出中文問題

轉自http://www.cnblogs.com/moonz-wu/archive/2008/12/30/1365552.html

wprintf 和 wcout

這篇文章應該是[netsin]的成果,我勤快,記下來。
注:wprintf是C的標準庫函數,但wcout不是C++的標準成員,C++中的 L"……" 是寬字符,卻未必是unicode字符,這與編譯器實現相關。
[乾坤一笑]說:為什么 C/C++ 語言把 L"xx" 定義為由實現決定的呢?這顯然是為了 C/C++ 的普適性、可移植性。Bjarne 的觀點認為,C++ 的方式是允許程序員使用任何字符集作為串的字符類型。另外,unicode 編碼已經發展了若干版本了,是否能永久適合下去也不得而知。有關 unicode 的詳細論述以及和其它字符集的比較,我推薦你看《無廢話xml》。


以下兩段代碼的執行環境是 windows xp professional 英文版,編譯器是 VS2005RTM。

// C
#include <stdio.h>
#include <locale.h>
int main( void )
{
setlocale( LC_ALL, "chs" );
//setlocale( LC_ALL, "Chinese-simplified" );
//setlocale( LC_ALL, "ZHI" );
//setlocale( LC_ALL, ".936" );
wprintf( L"中國" );

return 0;
}

// C++
#include <iostream>
#include <locale>
using namespace std;
int main( void )
{
locale loc( "chs" );
//locale loc( "Chinese-simplified" );
//locale loc( "ZHI" );
//locale loc( ".936" );
wcout.imbue( loc );
std::wcout << L"中國" << endl;

return 0;
}

說明:別混合使用 setlocale 和 std::locale 。

------------------------- 2006-07-05 記 -------------------------

"VC知識庫" 編碼為:56 43 D6 AA CA B6 BF E2 00 // ANSI編碼
L"VC知識庫" 在VC++ 中編碼為:56 00 43 00 E5 77 C6 8B 93 5E 00 00 // (windows口中的unicode)編碼
L"VC知識庫" 在GCC(Dev-CPP4990) 中編碼為:56 00 43 00 D6 00 AA 00 CA 00 B6 00 BF 00 E2 00 00 00 // 只是將ANSI編碼簡單的加0
L"VC知識庫" 在GCC(Dev-CPP4992) 中編譯失敗,報 Illegal byte sequence

L"VC知識庫" 在 Dev-CPP4992 中解決步驟為:
a. 將文件保存為 utf-8 編碼 // utf-8 是unicode的其中一種,但和(windows口中的unicode)不一樣
b. 去掉BOM頭:用二進制編輯器(比如VC)去掉剛才utf-8文件的前三個字節 // Linux/UNIX并不使用BOM
c. 使用 gcc/g++ 編譯運行

經過以上解決步驟,在 dev-cpp4992 中
"VC知識庫" 編碼為: 56 43 E7 9F A5 E8 AF 86 E5 BA 93 00 // utf-8編碼,注意不再是ANSI編碼了,因此用 printf/cout 將輸出亂碼
L"VC知識庫" 編碼為: 56 00 43 00 E5 77 C6 8B 93 5E 00 00 // (windows口中的unicode)編碼

補充:在mingw32中使用wcout和wstring需要加一些宏,比如
#define _GLIBCXX_USE_WCHAR_T 1
#include <iostream>
int main( void )
{
std::wcout << 1 << std::endl;
}
可以編譯通過,但無法Link通過,在網上google了一下,stlport說mingw32有問題,mingw32說是M$的c runtime有問題。

------------------------- 2007-01-05 記 -------------------------
一個多字節字符串和寬字符字符串互相轉化的事例
#define _CRT_SECURE_NO_WARNINGS // only for vc8
#include <string>
#include <clocale>
#include <cassert>
inline const std::string to_mbcs( const std::string& src )
{
return src;
}
const std::string to_mbcs( const std::wstring& src )
{
char* old_locale = _strdup( setlocale(LC_CTYPE,NULL) ); // 保存原來的locale
setlocale( LC_CTYPE, "chs" ); // 設置當前locale為chs,這在非簡體中文平臺上不可缺少

size_t count1 = wcstombs( NULL, src.c_str(), 0 ); // 計算新字符串長度
std::string des( count1, ' ' );
size_t count2 = wcstombs( &des[0], src.c_str(), count1 ); // 轉化
assert( count1 == count2 );

setlocale( LC_CTYPE, old_locale ); // 恢復到原來的locale
free( old_locale );

return des;
}
inline const std::wstring to_wcs( const std::wstring& src )
{
return src;
}
const std::wstring to_wcs( const std::string& src )
{
char* old_locale = _strdup( setlocale(LC_CTYPE,NULL) ); // 保存原來的locale
setlocale( LC_CTYPE, "chs" ); // 設置當前locale為chs,這在非簡體中文平臺上不可缺少

size_t count1 = mbstowcs( NULL, src.c_str(), 0 ); // 計算新字符串長度
std::wstring des( count1, L' ' );
size_t count2 = mbstowcs( &des[0], src.c_str(), count1 ); // 轉化
assert( count1 == count2 );

setlocale( LC_CTYPE, old_locale ); // 恢復到原來的locale
free( old_locale );

return des;
}

#include <iostream>
int main( void )
{
using namespace std;

cout << to_mbcs("你好1") << endl;
cout << to_mbcs(L"你好2") << endl;

const locale loc( "chs" );
wcout.imbue( loc );
wcout << to_wcs("你好3") << endl;
wcout << to_wcs(L"你好4") << endl;
}

------------------------- 2008-09-03 記 -------------------------
參見 《MBCS To Unicode

將想法付諸于實踐,借此來影響他人是一個人存在的真正價值

posted on 2015-03-05 15:36 厚積薄發 閱讀(5680) 評論(0)  編輯 收藏 引用 所屬分類: C/C++

導航

<2025年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

統計

常用鏈接

留言簿

隨筆分類

文章分類

文章檔案

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲一区二区三区免费在线观看| 影音先锋国产精品| 亚洲中字黄色| 亚洲欧美韩国| 国内精品一区二区三区| 老**午夜毛片一区二区三区| 久久综合伊人77777蜜臀| 亚洲国产日韩欧美| 亚洲国产欧美精品| 欧美午夜一区二区福利视频| 欧美一二区视频| 另类春色校园亚洲| 国产精品99久久久久久白浆小说 | 亚洲砖区区免费| 久久成人精品| 99re热这里只有精品视频| 亚洲图中文字幕| 亚洲电影在线看| 中文亚洲免费| 在线看片一区| 在线视频精品一| 亚洲国产精品日韩| 在线亚洲欧美专区二区| 在线成人小视频| 国产精品99久久久久久宅男| 又紧又大又爽精品一区二区| 一本大道久久精品懂色aⅴ| 国产亚洲精品aa| 亚洲毛片网站| 在线色欧美三级视频| 一本一道久久综合狠狠老精东影业 | 国产亚洲激情在线| 亚洲精品一区久久久久久| 国产亚洲欧美色| 日韩视频不卡中文| 亚洲私人影院| 亚洲黄色小视频| 久久黄色小说| 香蕉乱码成人久久天堂爱免费| 欧美.www| 老鸭窝91久久精品色噜噜导演| 欧美日韩中文精品| 欧美顶级大胆免费视频| 国产日韩精品一区二区三区| 亚洲理伦电影| 亚洲精品欧洲精品| 久久亚洲综合色| 久久免费精品视频| 国产精品一级在线| 一区二区三区欧美日韩| 99国产精品久久久久久久成人热 | 免费成人在线视频网站| 国产日韩高清一区二区三区在线| 日韩视频不卡| 亚洲午夜精品久久| 欧美屁股在线| 亚洲精品一区中文| 99精品视频免费| 欧美多人爱爱视频网站| 亚洲国产精品t66y| 亚洲国产精品一区二区www在线 | 性欧美暴力猛交另类hd| 香蕉久久夜色精品国产| 国产精品永久免费| 午夜精品一区二区在线观看| 欧美尤物一区| 国产一区在线观看视频| 久久成年人视频| 欧美成人资源| 亚洲精品一区二区三区福利| 欧美激情第三页| 亚洲免费高清| 欧美亚洲视频在线看网址| 国产乱码精品一区二区三| 小嫩嫩精品导航| 女生裸体视频一区二区三区| 欲色影视综合吧| 欧美大片91| 这里只有精品丝袜| 久久久免费精品| 亚洲欧洲免费视频| 欧美日韩免费一区| 亚洲欧美韩国| 欧美激情va永久在线播放| 99riav国产精品| 国产精品亚洲一区二区三区在线| 久久av一区二区三区漫画| 免费的成人av| 在线亚洲国产精品网站| 国产日本欧美一区二区三区在线| 久久精品免费观看| 亚洲精品美女久久久久| 欧美一区二区视频观看视频| 亚洲福利av| 国产精品久久国产三级国电话系列| 亚洲欧美日韩中文视频| 欧美成在线观看| 亚洲欧美高清| 亚洲国产日韩欧美| 国产精品色婷婷| 欧美不卡激情三级在线观看| 亚洲一区二区四区| 亚洲国产精品国自产拍av秋霞| 亚洲资源av| 亚洲日本视频| 国内自拍视频一区二区三区 | 亚洲一级在线观看| 欧美激情免费在线| 久久av在线看| 一区二区三区视频在线 | 欧美激情 亚洲a∨综合| 午夜精品影院| 一区二区av在线| 欧美激情影音先锋| 久久九九免费| 亚洲欧美中文另类| 亚洲精品一二三区| 激情欧美国产欧美| 国产精品日韩欧美一区二区三区| 欧美mv日韩mv国产网站| 欧美一区二区私人影院日本| 中文av一区二区| 亚洲精品一线二线三线无人区| 蜜臀a∨国产成人精品| 久久国产一区二区| 午夜精品网站| 亚洲天堂成人在线视频| 亚洲日本电影在线| 亚洲欧洲另类国产综合| 在线精品国产欧美| 一区二区三区在线观看视频| 国产一区999| 国产喷白浆一区二区三区| 欧美日韩在线看| 欧美三级电影网| 欧美久久99| 欧美日韩成人一区二区| 欧美劲爆第一页| 欧美高清影院| 欧美精品激情| 欧美日韩不卡视频| 欧美日韩亚洲一区二区| 欧美视频日韩视频在线观看| 欧美日韩国产综合视频在线观看中文| 欧美成人高清| 欧美美女福利视频| 欧美色图一区二区三区| 国产精品电影在线观看| 国产精品女主播| 国产一区自拍视频| 亚洲第一毛片| 亚洲精品五月天| 亚洲一区尤物| 久久成人精品无人区| 久久婷婷一区| 亚洲国产精品123| 99精品免费视频| 亚洲欧美日韩人成在线播放| 久久福利电影| 欧美成人亚洲成人日韩成人| 欧美日韩精品一区二区三区| 国产精品美女一区二区在线观看| 国产欧美韩国高清| 亚洲高清自拍| 亚洲伊人网站| 久久人人爽人人爽| 亚洲国产日韩综合一区| 亚洲午夜激情网站| 久久精品一区二区国产| 欧美激情综合亚洲一二区| 国产精品第十页| 亚洲高清影视| 亚洲自拍16p| 欧美电影免费观看网站| av72成人在线| 久久久免费精品| 国产精品成人av性教育| 好看的日韩视频| 国产精品99久久久久久有的能看| 久久精品一区二区三区不卡牛牛 | 麻豆乱码国产一区二区三区| 亚洲激情视频网站| 欧美一区午夜精品| 欧美日本国产在线| 激情小说亚洲一区| 亚洲欧美自拍偷拍| 欧美激情按摩| 久久精品国产77777蜜臀| 欧美日韩伦理在线免费| 在线成人av.com| 欧美亚洲一区二区三区| 亚洲精品国产精品国自产观看浪潮| 亚洲一区二区高清视频| 欧美成人dvd在线视频| 国产亚洲电影| 性色av一区二区三区| 亚洲日本va在线观看| 久久综合色8888| 好吊色欧美一区二区三区四区| 亚洲免费影视|