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

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 厚積薄發 閱讀(5713) 評論(0)  編輯 收藏 引用 所屬分類: C/C++

導航

<2025年12月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

統計

常用鏈接

留言簿

隨筆分類

文章分類

文章檔案

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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| 亚洲国产精品va在线看黑人 | 欧美午夜不卡在线观看免费| 一区二区三区日韩在线观看 | 久久九九免费视频| 欧美一区二区三区免费观看视频| 国内成人自拍视频| 欧美激情亚洲国产| 欧美日韩少妇| 欧美影片第一页| 久久夜色精品国产亚洲aⅴ| 亚洲人成免费| 亚洲五月六月| 亚洲国产91色在线| 99视频一区二区三区| 国产麻豆综合| 欧美超级免费视 在线| 欧美日韩精品在线观看| 久久黄色小说| 欧美激情第六页| 久久国产精品高清| 欧美国内亚洲| 久久激情视频久久| 欧美国产精品va在线观看| 亚洲欧美日韩精品久久久久| 久久夜色精品国产亚洲aⅴ| 艳妇臀荡乳欲伦亚洲一区| 欧美亚洲一区二区在线观看| 日韩香蕉视频| 久久久精品999| 午夜天堂精品久久久久| 麻豆91精品| 久久精品一区| 欧美三级网址| 亚洲第一精品影视| 国产精品永久免费视频| 亚洲人成在线免费观看| 一区在线影院| 亚洲欧美一区二区三区在线| 一区二区三区成人精品| 久久综合九九| 久久久一本精品99久久精品66| 欧美激情va永久在线播放| 久久一二三四| 国产视频精品xxxx| 这里只有精品电影| 一区二区三区欧美在线观看| 老司机成人网| 久久综合九色综合网站| 国产欧美一区二区精品性色 | 午夜日韩福利| 欧美四级在线| 亚洲精品综合在线| 91久久精品国产91性色| 久久久久久色| 久久免费高清视频| 国产日韩免费| 性感少妇一区| 久久久在线视频| 国产一区二区三区高清| 欧美一区二区三区四区在线 | 在线观看亚洲视频| 久久久av水蜜桃| 老司机67194精品线观看| 国产一区二区久久| 久久米奇亚洲| 欧美凹凸一区二区三区视频| 亚洲福利国产| 欧美激情久久久久久| 欧美激情精品久久久久| 亚洲精品一二三| 欧美日韩国产精品自在自线| 亚洲国产精品va在线看黑人 | 亚洲风情亚aⅴ在线发布| 久久久久青草大香线综合精品| 久久久五月天| 亚洲国产成人在线视频| 欧美xart系列高清| 日韩写真视频在线观看| 亚洲免费视频中文字幕| 国产亚洲视频在线| 狂野欧美性猛交xxxx巴西| 亚洲黄色三级| 欧美亚洲一区在线| 激情久久久久久| 欧美高清视频在线播放| 亚洲人午夜精品| 午夜精品久久久久久久久久久久| 国产精品丝袜xxxxxxx| 欧美在线视频播放| 亚洲精品1区| 欧美在线地址| 亚洲精品乱码久久久久久蜜桃91 | 欧美日韩国产三级| 亚洲新中文字幕| 免费观看一区| 亚洲嫩草精品久久| 在线看日韩欧美| 欧美日韩在线观看一区二区| 欧美一区二区三区视频| 亚洲国产人成综合网站| 亚洲综合电影| 亚洲国产综合91精品麻豆| 欧美日韩国产色视频| 欧美在线网址| 亚洲一区二区三区高清不卡| 美腿丝袜亚洲色图| 亚洲欧美成人一区二区在线电影| 一区二区三区在线看| 国产精品扒开腿做爽爽爽软件| 久久久国产精品一区二区三区| 亚洲精品人人| 欧美激情成人在线| 欧美一级视频一区二区| 亚洲精品在线免费| 国产自产女人91一区在线观看| 欧美日韩中国免费专区在线看| 久久精品国产v日韩v亚洲 | 亚洲欧洲一级| 毛片av中文字幕一区二区| 亚洲在线视频网站| 亚洲人线精品午夜| 精品88久久久久88久久久| 国产精品网站在线| 欧美三级视频| 欧美精品在欧美一区二区少妇| 久久久免费精品视频| 午夜精品电影| 亚洲一区观看| 亚洲天堂av图片| 99视频精品在线| 亚洲看片一区| 亚洲精品综合| 99re这里只有精品6| 亚洲国产你懂的| 欧美二区不卡| 亚洲大片精品永久免费| 欧美成人午夜激情| 欧美成人资源网| 欧美黄污视频| 亚洲激情第一页| 亚洲精品综合久久中文字幕| 亚洲激情视频在线| 亚洲黄色小视频| 亚洲毛片在线观看| 一本久道久久综合婷婷鲸鱼| 亚洲美女视频网| 一区二区三区**美女毛片| 一区二区av在线| 亚洲无线视频| 欧美一区二区三区在| 久久黄色级2电影| 久久手机免费观看| 欧美高清免费| 欧美日韩在线电影| 国产精品揄拍500视频| 国产亚洲成av人片在线观看桃 | 国产亚洲精品资源在线26u| 国产女同一区二区| 精久久久久久| 亚洲免费电影在线| 亚洲欧美色一区| 久久久久久久成人| 亚洲丰满在线| 一区二区三区四区五区精品| 中文国产成人精品久久一| 亚洲欧美激情视频| 久久久综合精品| 欧美日本一区二区高清播放视频| 欧美视频手机在线| 国产一区二区三区日韩| 亚洲欧洲一区二区三区| 亚洲性视频h| 久久野战av| 日韩亚洲视频在线| 久久精品国产清自在天天线| 美女黄网久久| 国产精品嫩草影院一区二区| 国内视频精品| 亚洲伊人观看| 欧美成人午夜激情视频| 亚洲一二三区精品| 久久在线视频| 国产精品专区第二| 亚洲精品日韩在线观看| 欧美一站二站| 日韩视频在线永久播放| 久久久久国产精品www | 免费久久99精品国产自在现线| 欧美日韩三区| 亚洲国产天堂久久综合| 亚洲免费在线观看视频| 欧美激情在线观看| 欧美专区在线播放| 国产精品vvv| 亚洲另类自拍| 免费观看欧美在线视频的网站| 亚洲伊人久久综合|