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

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>
            欧美不卡一区| 亚洲第一在线| 99精品国产福利在线观看免费| 免费看的黄色欧美网站| 亚洲精品少妇30p| 亚洲精品一区二区在线| 欧美日韩国产天堂| 午夜日韩av| 欧美一区二区三区男人的天堂| 国产午夜精品久久久| 另类尿喷潮videofree| 美女精品在线| 亚洲天堂网在线观看| 亚洲免费婷婷| 1000部国产精品成人观看| 亚洲黄色视屏| 国产精品午夜av在线| 麻豆国产精品777777在线| 欧美成人免费全部观看天天性色| 亚洲深夜福利视频| 欧美亚洲视频一区二区| 亚洲精品三级| 午夜国产不卡在线观看视频| 一区二区三区在线视频观看| 亚洲精品日本| 国产亚洲欧美一区二区| 亚洲国产婷婷| 国产欧美日韩在线播放| 欧美激情精品久久久久久免费印度| 欧美视频日韩视频| 欧美 日韩 国产 一区| 国产精品成人免费视频| 欧美高清hd18日本| 国产精品夜夜夜| 亚洲国产美女| 韩日成人av| 正在播放欧美一区| 亚洲精品麻豆| 欧美专区一区二区三区| 亚洲一区二区少妇| 欧美va亚洲va日韩∨a综合色| 午夜久久影院| 欧美日韩美女| 欧美黑人国产人伦爽爽爽| 国产午夜精品视频免费不卡69堂| 亚洲精品一品区二品区三品区| 黄色av日韩| 午夜精品www| 亚洲欧美日本精品| 欧美日韩1080p| 亚洲国产另类精品专区 | 欧美一区二区啪啪| 亚洲视频在线观看网站| 欧美成人乱码一区二区三区| 久久久噜久噜久久综合| 国产精品亚洲欧美| 中日韩美女免费视频网站在线观看| 91久久线看在观草草青青| 久久久久久**毛片大全| 久久国产手机看片| 国产精品一区二区你懂的| 这里只有精品丝袜| 亚洲色无码播放| 欧美日韩一级大片网址| 最新日韩中文字幕| 日韩亚洲视频| 欧美日韩精品免费观看视一区二区| 亚洲高清视频在线| 亚洲精品一区二| 欧美巨乳在线观看| 亚洲美女色禁图| 亚洲影院一区| 国产精品国产亚洲精品看不卡15| 一区二区高清视频| 午夜精品久久久久久久久久久久久| 欧美视频中文在线看| 中日韩男男gay无套| 午夜精品久久久久影视| 国产麻豆一精品一av一免费| 亚洲午夜久久久久久久久电影网| 亚洲免费一在线| 国产欧美精品一区| 久久精品视频在线看| 欧美大片一区二区| 9久草视频在线视频精品| 国产精品v日韩精品| 性一交一乱一区二区洋洋av| 久久精品国语| 亚洲精品久久久久中文字幕欢迎你 | 99在线视频精品| 欧美视频国产精品| 欧美一级视频免费在线观看| 狼人天天伊人久久| 日韩视频中文| 国产精品色网| 久久婷婷久久| 99精品视频一区二区三区| 欧美在线免费视屏| 91久久综合| 国产精品免费一区二区三区在线观看| 久久爱91午夜羞羞| 亚洲日本成人| 久久精品一区二区三区不卡| 亚洲人成网站色ww在线| 国产精品一区二区三区四区五区| 久久久天天操| 亚洲欧美变态国产另类| 亚洲国产成人91精品 | 国产一区二区三区高清| 欧美不卡高清| 午夜精品一区二区在线观看 | 亚洲欧美日韩一区二区三区在线| 激情综合电影网| 国产精品乱码一区二区三区| 免费成人av在线| 亚洲欧美日韩综合| 日韩亚洲成人av在线| 欧美www视频在线观看| 小辣椒精品导航| 一本久久精品一区二区| 在线播放中文字幕一区| 国产精品日本一区二区| 欧美精品日韩www.p站| 久久久蜜臀国产一区二区| 亚洲自拍电影| 野花国产精品入口| 亚洲狠狠丁香婷婷综合久久久| 久久久www成人免费无遮挡大片| 亚洲在线成人精品| 日韩天堂在线观看| 亚洲欧洲视频在线| 亚洲第一区在线| 国模私拍一区二区三区| 国产欧美一区二区精品忘忧草 | 久久噜噜噜精品国产亚洲综合| 亚洲校园激情| 亚洲午夜女主播在线直播| 亚洲精品久久久久中文字幕欢迎你| 奶水喷射视频一区| 女女同性女同一区二区三区91| 久久精品国产亚洲一区二区| 欧美一级片久久久久久久| 亚洲综合好骚| 亚洲欧洲av一区二区| 亚洲欧美成人一区二区在线电影 | 亚洲综合电影一区二区三区| 一二三四社区欧美黄| 一本久久a久久精品亚洲| 一本大道久久精品懂色aⅴ| 亚洲精品视频一区二区三区| 亚洲美女区一区| 99视频精品在线| 亚洲一区二区三区视频播放| 亚洲综合色婷婷| 久久精品99| 噜噜噜躁狠狠躁狠狠精品视频| 免费成人黄色片| 亚洲欧洲综合另类| 99热这里只有成人精品国产| 亚洲视频在线观看| 欧美在线视频导航| 久久欧美肥婆一二区| 欧美激情一区二区三区| 欧美日韩妖精视频| 国产日韩在线播放| 亚洲国产精品女人久久久| 99视频精品全国免费| 亚洲欧美日韩国产综合精品二区| 久久xxxx精品视频| 欧美激情第1页| 一区二区三区欧美视频| 欧美亚洲系列| 欧美成人精品影院| 国产精品视频免费观看www| 国内精品美女在线观看| 亚洲免费精彩视频| 欧美在线视频一区二区| 欧美激情四色| 亚洲欧美久久久| 欧美+亚洲+精品+三区| 国产精品久久久久999| 一区二区三区无毛| 亚洲在线免费视频| 欧美成人精品激情在线观看| 99亚洲视频| 久久一区中文字幕| 国产精品亚洲综合久久| 亚洲黑丝在线| 久久国产精品亚洲va麻豆| 亚洲激情不卡| 久久精品视频在线观看| 国产精品激情偷乱一区二区∴| 伊人成人在线视频| 欧美一区成人| 99国内精品| 欧美成人伊人久久综合网| 国产日韩欧美一区| 亚洲一区二区三区在线视频| 亚洲电影av| 久久久久久久网|