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

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>
            亚洲国产清纯| 一区二区三区黄色| 久久久久久久久久久久久女国产乱 | 欧美精品在线一区| 亚洲人成绝费网站色www| 欧美成人三级在线| 欧美国产日韩一区二区在线观看| 在线电影国产精品| 91久久在线观看| 欧美日韩国产一中文字不卡 | 欧美日韩伦理在线| 亚洲一级黄色片| 亚洲一区二区影院| 国产在线拍偷自揄拍精品| 老司机精品福利视频| 欧美1区2区3区| 亚洲一区二区在线免费观看视频| 午夜免费久久久久| 亚洲电影观看| 一本大道久久a久久精品综合| 国产精品午夜在线观看| 久久综合精品国产一区二区三区| 免费久久99精品国产自在现线| 亚洲精品影视| 亚洲欧美在线视频观看| 136国产福利精品导航网址| 亚洲理伦在线| 在线观看国产一区二区| 日韩一级免费观看| 激情小说另类小说亚洲欧美| 亚洲精品视频啊美女在线直播| 国产欧美va欧美va香蕉在| 欧美激情2020午夜免费观看| 国产模特精品视频久久久久 | 另类酷文…触手系列精品集v1小说| 久久久欧美精品| 在线视频亚洲| 你懂的网址国产 欧美| 欧美一区二区在线播放| 欧美成人午夜剧场免费观看| 久久久av水蜜桃| 欧美午夜三级| 亚洲激情不卡| 狠狠色综合色区| 亚洲一级黄色| 中国av一区| 欧美aaa级| 欧美成人综合网站| 国产亚洲成av人在线观看导航| 一本一道久久综合狠狠老精东影业 | 亚洲高清网站| 欧美一进一出视频| 亚洲综合色丁香婷婷六月图片| 欧美成人午夜剧场免费观看| 麻豆精品在线播放| 国产性天天综合网| 亚洲欧美日韩国产一区二区| 亚洲婷婷在线| 欧美色欧美亚洲另类二区 | 欧美亚洲在线视频| 欧美午夜激情小视频| 欧美激情视频免费观看| 亚洲高清视频在线观看| 久久久久www| 久久只精品国产| 精品91久久久久| 欧美韩国日本一区| 久久天堂国产精品| 久久精品人人| 国内成+人亚洲| 欧美在线播放一区二区| 久久精品亚洲精品国产欧美kt∨| 国产精品美女久久久久av超清 | 久久av红桃一区二区小说| 亚洲深爱激情| 欧美性猛交99久久久久99按摩| 亚洲精品免费一二三区| 99re6这里只有精品| 欧美日韩国产在线看| 在线中文字幕日韩| 午夜精彩视频在线观看不卡| 国产欧美在线观看一区| 欧美有码视频| 欧美aⅴ一区二区三区视频| 亚洲欧洲久久| 欧美性猛交视频| 香蕉久久a毛片| 麻豆免费精品视频| 亚洲三级国产| 国产精品免费看| 男人插女人欧美| 久久久久国产精品厨房| 国产乱子伦一区二区三区国色天香| 一区二区三区日韩精品视频| 性欧美暴力猛交另类hd| 激情小说另类小说亚洲欧美| 免费在线亚洲欧美| 亚洲乱码国产乱码精品精可以看 | 狠狠色综合播放一区二区| 久久综合激情| 日韩一级黄色大片| 久久久久久亚洲精品杨幂换脸| 亚洲国产精品热久久| 欧美三级欧美一级| 欧美亚洲免费在线| 亚洲精品乱码久久久久久蜜桃91| 亚洲视频电影图片偷拍一区| 国产一区二区久久| 欧美日韩大片一区二区三区| 香蕉久久夜色精品国产使用方法| 亚洲国产日韩欧美| 欧美一二区视频| 亚洲国产一区二区三区青草影视| 欧美三级网址| 女仆av观看一区| 欧美一区二区成人| 一区二区三区四区精品| 欧美成人tv| 久久免费视频观看| 亚洲一区日韩在线| 亚洲精品自在在线观看| 国产偷国产偷亚洲高清97cao | 欧美一区二区三区四区在线观看地址 | 亚洲高清在线观看| 久久久噜久噜久久综合| 亚洲一区二区视频在线| 亚洲国产aⅴ天堂久久| 国产亚洲视频在线观看| 国产精品v欧美精品v日韩| 欧美电影免费观看| 久久综合久久久| 久久精品视频播放| 午夜精品www| 一区二区三区毛片| 亚洲欧洲一区二区三区| 欧美第一黄网免费网站| 久久一区亚洲| 久久久精品国产免大香伊| 午夜精品区一区二区三| 亚洲一区二区三区四区五区午夜| 亚洲第一黄色网| 欧美成人精精品一区二区频| 老司机久久99久久精品播放免费| 欧美影院成人| 久久精品99国产精品日本| 欧美伊人久久久久久久久影院| 亚洲午夜在线视频| 亚洲免费视频成人| 亚洲欧美在线另类| 校园春色综合网| 久久精品国产精品亚洲精品| 欧美亚洲一区| 久久人人爽人人| 欧美99久久| 亚洲经典三级| 夜夜嗨av一区二区三区网站四季av| 亚洲精品乱码久久久久久按摩观| 亚洲欧洲在线免费| 亚洲网站在线观看| 午夜国产精品视频| 久久久成人精品| 老司机一区二区三区| 欧美激情精品| 欧美视频在线免费| 国产性天天综合网| 亚洲国产欧美精品| 亚洲图片欧美一区| 欧美综合国产| 欧美不卡视频| 一本色道久久综合亚洲精品小说 | 欧美女同在线视频| 国产精品乱子久久久久| 国产一区二区在线观看免费| 亚洲国产成人在线视频| 亚洲无毛电影| 久久久久免费| 亚洲国产精品一区在线观看不卡| 9l视频自拍蝌蚪9l视频成人| 亚洲一级在线观看| 久久午夜电影网| 欧美亚洲成人精品| 1024国产精品| 亚洲女女做受ⅹxx高潮| 嫩草国产精品入口| 99精品福利视频| 久久青草久久| 国产精品视频xxxx| 亚洲黄色有码视频| 欧美中文字幕在线播放| 亚洲二区视频在线| 欧美与黑人午夜性猛交久久久| 欧美黄色一区二区| 精品成人国产在线观看男人呻吟| 亚洲午夜在线视频| 免费观看日韩av| 欧美一区二区三区视频在线观看| 欧美日本国产一区| 亚洲国产电影| 久久免费视频观看| 亚洲天堂久久|