多位元組字元和寬字元

來源:互聯網
上載者:User

標籤:unicode   visualstudio   char   wchar_t   character set   

多位元組字元和寬字元

開發多語言版軟體,經常會碰到字元編碼的問題,看了很多資料都說得不是很清楚,終於碰到一篇講的不錯的文章跟大家分享一下!(時間關係,翻譯了重點部分)


char型和wchar型

 在日文版Windows上我們用到字元編碼是Shift-JIS,主要的用1byte表示英數字,2byte表示日文字元,這種編碼錶示的字元稱作多位元組字元。(中文版Windows字元編碼:GB2312)




char數組的字元

 世界上主流的標準字元編碼是Unicode,在Windows上,英數字,日文字元,中文字元,其他語言字元,原則上都是用2byte表示一個字元。這種編碼錶示的字元稱作寬節字。






wchar_t數組的字元



字元的聲明,定義和大小

為了表示不同的字串,下面定義了char型和wchar_t型的字串,其記憶體大小參考注釋部分。

// char(マルチバイト文字列)の宣言と表示char    strm[]  = "Testストリング";printf( "%3d: %s\n", sizeof( strm ), strm );    // 15: Testストリング // wchar_t(ワイド文字列)の宣言と表示setlocale( LC_ALL, "Japanese" );wchar_t strw[]  = L"Testすとりんぐ";wprintf( L"%3d: %s\n", sizeof( strw ), strw );  // 20: Testすとりんぐ



TCHAR型-自動識別編碼

在VisualStudio中可以通過TCHAR定義字元,TCHAR型就是typedef定義,程式在編譯時間候設定為多位元組字元時,變成了char型,設定為寬位元組字元時,變成了wchar_t型,是個方便的類型。

// TCHAR(自動対応型文字)の宣言と表示TCHAR   strt[]  = _T("Testすとリング");_tprintf( _T("%3d: %s\n"), sizeof( strt ), strt );

VisualStudio的字元集的指定

不管你是要用Unicode還是Shift-JIS在VisualStudio中都是可以自由的選擇。

在VisualStudio工程解決方案上右擊,從彈出的菜單中選擇屬性,出現如下的圖。






文字セット(字元集)-紅色框中

設定なし(沒有設定):沒有設定_UNICODE _MBCS宏,僅適用於英文ANSII。
Unicode 文字セットを使用する(使用Unicode字元集):設定了_UNICODE宏,TCHAR型自動轉換為wchar_t型,字元操作函數也自動轉換為了對應的寬字元函數。
マルチ バイト文字セットを使用する(使用多位元組字元集):設定了_MBCS宏,TCHAR型自動轉換為char型,字串操作函數也自動轉換為了對應的多位元組函數。


多位元組字元與寬字元的轉換
函數mbstowcs:多位元組字元到寬字元的轉換函式

// mbstowcs関數でワイド文字列へ変換char    strm[]  = "Testストリング";wchar_t strwfm[32];setlocale( LC_ALL, "Japanese" ); mbstowcs( strwfm, strm, strlen( strm )+1 );wprintf( L"%s(文字數=%d)\n", strwfm, wcslen( strwfm ) );

函數wcstombs:寬字元到多位元組字元的轉換函式
// wcstombs関數でマルチバイト文字列へ変換wchar_t strw[]  = L"Testすとりんぐ";char    strmfw[32];setlocale( LC_ALL, "Japanese" ); wcstombs( strmfw, strw, sizeof( strmfw ) );printf( "%s(文字數=%d)\n", strmfw, strlen( strmfw ) );


P.S參考地址:http://mkubara.com/index.php/%E3%83%9E%E3%83%AB%E3%83%81%E3%83%90%E3%82%A4%E3%83%88%E6%96%87%E5%AD%97%E5%88%97%E3%81%A8%E3%83%AF%E3%82%A4%E3%83%89%E6%96%87%E5%AD%97%E5%88%97

多位元組字元和寬字元

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.