首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

VC++ Unicode 程式設計完整指南:從理論到 VS6.0 實作

     編輯:關於VC++

一、什麼是 Unicode

ASCII 使用 1 Byte 編碼 (0x00-0xFF),僅支援英文與部分符號。各國制定自有編碼 (中文為 GB2312),利用擴展 ASCII (高位元為 1) 雙位元組表示漢字,但與擴展 ASCII 符號衝突,且各國編碼互不相容。

Unicode 採用 2 Bytes (0x0000-0xFFFF),容納 65,536 字符,為全球所有文字分配唯一碼位,徹底解決多語言共存問題。

二、Unicode 優勢

  • 單一程式碼支援多國語言,實現國際化
  • Windows NT 核心基於 Unicode,ANSI API 呼叫需轉換,耗費效能;原生 Unicode 程式執行更高效

編碼對照範例:

字符ANSIUnicode
A41H0041H
N4EH004EH
和CDBAH548CH

三、C++ Unicode 程式設計基礎

寬字元型別

typedef unsigned short wchar_t;  // 定義於 wchar.h

寬字元字串常數

wchar_t* str = L"Hello";  // 前綴 L,不可有空格

寬字元字串函數

ANSI 函數以 \0 結尾,Unicode 以 \0\0 結尾。strlen(L"Hello") 會誤判為 1,必須使用 wcslen。

通用程式設計宏 (tchar.h)

#ifdef _UNICODE
typedef wchar_t TCHAR;
#define _T(x) L##x
#else
typedef char TCHAR;
#define _T(x) x
#endif

常用對照表:

宏/型別_UNICODE 未定義_UNICODE 已定義
TCHARcharwchar_t
_T("str")"str"L"str"
_tcslenstrlenwcslen
_tcscpystrcpywcscpy
_tcscmpstrcmpwcscmp

四、Win32 API Unicode 程式設計

Win32 依 UNICODE (無底線) 宏切換:

#ifdef UNICODE
#define SetWindowText SetWindowTextW
#else
#define SetWindowText SetWindowTextA
#endif

實際不存在 SetWindowText(),僅有 SetWindowTextA/W。_UNICODE 用於 C Runtime,UNICODE 用於 Windows SDK,實務上同時定義兩者。

五、VC++ 6.0 專案設定 Unicode

  1. 專案 → Settings → C/C++ → Preprocessor definitions:移除 _MBCS,加入 _UNICODE, UNICODE
  2. Link → Output → Entry Point:填入 wWinMainCRTStartup
  3. 程式碼中使用通用型別:TCHAR, _T(), LPTSTR, LPCTSTR
  4. 字串長度計算注意:字元數 = sizeof(buf)/sizeof(TCHAR),位元組數 = sizeof(buf)
  5. 使用通用字串函數:_tcs* (CRT) 或 lstr* (Win32)

六、實測範例

  1. 建立對話框專案,按鈕點擊顯示中文字串
  2. 控制台 → 區域選項 → 進階 → 非 Unicode 程式語言改為「日語」並重開機
  3. ANSI 版執行會出現亂碼;Unicode 版正常顯示

結語

掌握 Unicode 程式設計是開發國際化軟體的基礎,VC6.0 僅需簡單設定即可支援。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved