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

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>
            99热在这里有精品免费| 国产亚洲成av人片在线观看桃| 91久久香蕉国产日韩欧美9色| 久久精品国产99| 欧美一区亚洲二区| 美国十次成人| 亚洲日本久久| 艳妇臀荡乳欲伦亚洲一区| 一区二区三区在线看| 伊大人香蕉综合8在线视| 狠狠色丁香婷婷综合影院| 亚洲福利在线看| 在线视频亚洲一区| 亚洲欧美成人| 久久综合九色综合网站| 亚洲高清网站| 亚洲在线免费观看| 香蕉尹人综合在线观看| 巨乳诱惑日韩免费av| 欧美日韩国产bt| 国产一级一区二区| 999亚洲国产精| 亚欧成人精品| 91久久精品一区| 欧美在线看片a免费观看| 欧美激情麻豆| 国产一区二区三区在线观看免费| 亚洲国产免费看| 欧美一级专区免费大片| 亚洲电影专区| 欧美专区在线观看一区| 欧美日本免费一区二区三区| 国产欧亚日韩视频| 在线视频欧美一区| 欧美成人免费在线| 欧美在线你懂的| 国产精品第三页| 亚洲人成亚洲人成在线观看| 久久成年人视频| 日韩小视频在线观看| 久久九九久精品国产免费直播 | 久久亚洲春色中文字幕| 亚洲人www| 久久精品国产清高在天天线| 欧美视频国产精品| 亚洲精品久久7777| 久久天堂av综合合色| 一区二区三区四区五区在线| 蜜臀va亚洲va欧美va天堂| 国产欧美日韩综合一区在线播放| 99在线精品视频在线观看| 看欧美日韩国产| 欧美伊人久久久久久午夜久久久久| 欧美日韩精品在线观看| 韩国美女久久| 久久激五月天综合精品| 一区二区日韩| 欧美日韩一区视频| 日韩视频免费看| 亚洲国产精品一区二区第一页| 久久国产精品亚洲va麻豆| 国产伦精品一区二区三区高清版| 夜夜精品视频一区二区| 亚洲二区视频在线| 欧美高清不卡| 欧美第一黄网免费网站| 在线高清一区| 噜噜噜躁狠狠躁狠狠精品视频| 午夜亚洲精品| 国产亚洲成av人在线观看导航 | 亚洲综合成人婷婷小说| 欧美日韩国产片| 在线综合亚洲欧美在线视频| 最新日韩在线视频| 欧美成人高清视频| 99国产一区二区三精品乱码| 欧美黑人在线播放| 欧美a级一区| 99综合电影在线视频| 久久精品国产69国产精品亚洲 | 午夜精品久久久久久久99黑人| 99热精品在线| 国产精品实拍| 久久久久久有精品国产| 久久久中精品2020中文| 91久久国产自产拍夜夜嗨| 亚洲日本电影| 久久乐国产精品| 欧美激情偷拍| 99国产精品久久久久老师| 91久久精品美女| 国产精品久久久久999| 欧美一级视频精品观看| 欧美在线你懂的| 亚洲人成毛片在线播放| 亚洲毛片av| 国产视频一区在线| 亚洲福利视频二区| 国产精品久久久久免费a∨大胸 | 午夜视频一区| 久久蜜桃资源一区二区老牛 | 久久国产黑丝| 亚洲日本欧美天堂| 国产精品99久久久久久www| 国产亚洲欧美日韩精品| 欧美激情中文字幕一区二区| 欧美特黄a级高清免费大片a级| 久久久噜噜噜久噜久久| 欧美精品久久一区| 久久久久久久一区二区三区| 久久免费视频观看| 亚洲网站视频| 狂野欧美激情性xxxx| 小嫩嫩精品导航| 欧美久久视频| 国内不卡一区二区三区| 亚洲欧洲三级| 在线观看一区二区视频| 夜夜爽99久久国产综合精品女不卡 | 亚洲美女黄色| 久久久蜜桃精品| 久久gogo国模裸体人体| 欧美午夜精品理论片a级按摩| 久久综合色影院| 国产精品视频免费一区| 亚洲国产欧美不卡在线观看| 好吊日精品视频| 亚洲综合欧美日韩| 亚洲综合欧美| 欧美视频日韩视频| 亚洲精品美女久久久久| 亚洲人成网在线播放| 久久久999国产| 欧美一区二区三区四区在线观看地址 | 欧美日韩无遮挡| 91久久精品美女| 亚洲精品自在久久| 欧美高清免费| 亚洲国产成人精品女人久久久| 狠狠干综合网| 久久久国产精品亚洲一区| 欧美亚洲综合网| 国产精品一区二区三区久久| 亚洲网站视频| 亚洲欧美韩国| 国产精品一区二区久激情瑜伽| 亚洲欧美日韩国产另类专区| 亚洲欧美国产毛片在线| 国产精品免费网站| 亚洲欧美成人在线| 久久精品99国产精品日本| 国产性色一区二区| 久久精品国产一区二区三区免费看 | 欧美亚洲自偷自偷| 国产精品一卡| 欧美综合第一页| 欧美成年视频| 最新日韩在线视频| 欧美人与性动交α欧美精品济南到| 亚洲激情一区| 一本到12不卡视频在线dvd| 欧美激情视频网站| 亚洲网友自拍| 欧美大片专区| 亚洲无限av看| 国产一区二区三区日韩欧美| 久久久久欧美| 亚洲区第一页| 久久国产精品黑丝| 亚洲国产高清视频| 欧美午夜精品理论片a级按摩| 午夜精品久久久久久久99水蜜桃 | 久久精品人人做人人爽电影蜜月| 久久久久久成人| 亚洲黄色成人久久久| 欧美日韩国内自拍| 午夜久久久久| 亚洲激情第一页| 性18欧美另类| 最新日韩精品| 国产日韩欧美二区| 欧美二区乱c少妇| 亚洲午夜视频在线| 欧美成人黑人xx视频免费观看| 中日韩午夜理伦电影免费| 国产三级欧美三级| 欧美精品二区三区四区免费看视频| 国产精品99久久久久久人| 麻豆av一区二区三区久久| 亚洲天堂av在线免费观看| 国内精品久久久久影院优| 欧美日本不卡| 久久五月婷婷丁香社区| 一本色道久久综合亚洲精品不卡| 久久午夜精品| 午夜视频在线观看一区| 99视频精品免费观看| 伊人成人开心激情综合网| 国产精品美女xx| 欧美日韩精品免费在线观看视频|