Unicode 寬位元組字符集

2021-08-25 03:04:11 字數 4754 閱讀 2286

unicode

: 寬位元組字符集

1. 如何取得乙個

既包含單位元組字元又包含雙位元組字元的字串的字元個數?

可以呼叫

microsoft visual c++

的執行期庫包含函式

_mbslen

來操作多位元組(既包括單位元組也包括雙位元組)字串。 呼叫

strlen

函式,無法真正了解字串中究竟有多少字元,它只能告訴你到達結尾的

0之前有多少個位元組。

2. 如何對dbcs

(雙位元組字符集)

字串進行操作? 函式

描述 ptstr

charnext

(lpctstr );

ptstr

charprev

(lpctstr, lpctstr

bool

isdbcsleadbyte

( byte )

;如果該位元組是dbcs字元的第乙個位元組,則返回非0值

3. 為什麼要使用

unicode?

(1)可以很容易地在不同語言之間進行資料交換。 (

2)使你能夠分配支援所有語言的單個二進位制

.exe

檔案或dll

檔案。 (3

)提高應用程式的執行效率。

windows 2000

是使用unicode

從頭進行開發的,如果呼叫任何乙個

windows

函式並給它傳遞乙個

ansi

字串,那麼系統首先要將字串轉換成

unicode

,然後將

unicode

字串傳遞給作業系統。如果希望函式返回

ansi

字串,系統就會首先將

unicode

字串轉換成

ansi

字串,然後將結果返回給你的應用程式。進行這些字串的轉換需要占用系統的時間和記憶體。通過從頭開始用

unicode

來開發應用程式,就能夠使你的應用程式更加有效地執行。

windows ce

本身就是使用

unicode

的一種作業系統,完全不支援

ansi windows函式

windows 98

只支援ansi

,只能為

ansi

開發應用程式。

microsoft

公司將com從16

位windows

轉換成win32

時,公司決定需要字串的所有

com介面方法都只能接受

unicode

字串。

4. 如何編寫

unicode

源**?

microsoft

公司為unicode

設計了windowsapi

,這樣,可以儘量減少**的影響。實際上,

可以編寫單個源**檔案,以便使用或者不使用

unicode

來對它進行編譯。只需要定義兩個巨集(

unicode

和_unicode

),就可以修改然後重新編譯該源文

件。

_unicode

巨集用於c

執行期標頭檔案,而

unicode

巨集則用於

windows

標頭檔案。當編譯源**模組時,通常必須同時定義這兩個巨集。

5. windows

定義的unicode

資料型別有哪些?

資料型別說明

wchar

unicode字元

pwstr

指向unicode

字串的指標

pcwstr

指向乙個恆定的

unicode

字串的指標

對應的ansi

資料型別為

char

,lpstr

和lpcstr。

ansi/unicode

通用資料型別為

tchar

,ptstr,lpctstr。

6. 如何對

unicode

進行操作?

字符集特性例項

ansi

操作函式以

str開頭

strcpy

unicode

操作函式以

wcs開頭

wcscpy

mbcs

操作函式以

_mbs

開頭_mbscpy

ansi/unicode

操作函式以

_tcs

開頭_tcscpy(c

執行期庫)

ansi/unicode

操作函式以

lstr

開頭 lstrcpy

(windows函式)

所有新的和未過時的函式在

windows2000

中都同時擁有

ansi

和unicode

兩個版本。

ansi

版本函式結尾以

a表示;

unicode

版本函式結尾以w表示

。windows

會如下定義:

#ifdef unicode

#define createwindowex createwindowexw

#else

#define createwindowex createwindowexa

#endif // !unicode

7. 如何表示

unicode

字串常量?

字符集例項

ansi 「string」

unicode l「string」

ansi/unicode t(「string」)

或_text(

「string

」)if( szerror[0] == _text(『j』) )

8. 為什麼應當盡量使用作業系統函式?

這將有助於稍稍提高應用程式的執行效能,因為作業系統字串函式常常被大型應用程式比如作業系統的外殼程序

explorer.exe

所使用。由於這些函式使用得很多,因此,在應用程式執行時,它們可能已經被裝入

ram。 如:

strcat

,strchr

,strcmp

和strcpy等。

9. 如何編寫符合

ansi

和unicode

的應用程式? (

1)將文字串視為字元陣列,而不是

chars

陣列或位元組陣列。 (

2)將通用資料型別(如tchar和ptstr)用於文字字元和字串。 (

3)將顯式資料型別(如

byte

和pbyte

)用於位元組、位元組指標和資料快取。 (

4)將text

巨集用於原義字元和字串。 (

5)執行全域性性替換(例如用

ptstr

替換pstr)。

(6)修改字串運算問題。例如函式通常希望在字元中傳遞乙個快取的大小,而不是位元組。這意味著不應該傳遞sizeof(szbuffer),而應該傳遞(sizeof(szbuffer)/sizeof(tchar)

。另外,如果需要為字串分配乙個記憶體塊,並且擁有該字串中的字元數目,那麼請記住要按位元組來分配記憶體。這就是說,應該呼叫malloc(ncharacters

*sizeof(tchar)),

而不是呼叫

malloc(ncharacters)。

10.

如何對字串進行有選擇的比較?

通過呼叫

comparestring

來實現。 標誌

含義 norm_ignorecase

忽略字母的大小寫

norm_ignorekanatype

不區分平假名與片假名字元

norm_ignorenonspace

忽略無間隔字元

norm_ignoresymbols

忽略符號

norm_ignorewidth

不區分單位元組字元與作為雙位元組字元的同乙個字元

sort_stringsort

將標點符號作為普通符號來處理

11.

如何判斷乙個文字檔案是

ansi

還是unicode?

判斷如果文字檔案的開頭兩個位元組是

0xff

和0xfe

,那麼就是

unicode

,否則是

ansi。

12.

如何判斷一段字串是

ansi

還是unicode?

用istextunicode

進行判斷。

istextunicode

使用一系列統計方法和定性方法,以便猜測快取的內容。由於這不是一種確切的科學方法,因此

istextunicode

有可能返回不正確的結果。

13.如何在unicode

與ansi

之間轉換字串?

windows

函式multibytetowidechar

用於將多位元組字串轉換成寬字串;函式

widechartomultibyte

將寬字串轉換成等價的多位元組字串。

源文件 <>

Windows字符集 寬位元組(Unicode)

如果想讓多位元組轉為寬位元組,即在前面加大寫l,如 messagebox aaa messagebox l aaa 這樣就可以成功使用messagebox這個函式了,該函式大家應該都不陌生,就是mfc中的資訊顯示函式。下面介紹一些常用的字元轉換 統計多位元組字串的長度 int num 0 char ...

單位元組字符集,多位元組字符集,Unicode

我們在這裡介紹一下字元型別。這裡有3種編碼模式對應3種字元型別。第一種編碼型別是單子節字符集 single byte character set or sbcs 在這種編碼模式下,所有的字元都只用乙個位元組表示。ascii是sbcs。乙個位元組表示的0用來標誌sbcs字串的結束。第二種編碼模式是多位...

寬字符集(unicode)操作函式

寬字元函式 普通c函式 描述 iswalnum isalnum 測試字元是否為數字或字母 iswalpha isalpha 測試字元是否是字母 iswcntrl iscntrl 測試字元是否是控制符 iswdigit isdigit 測試字元是否為數字 iswgraph isgraph 測試字元是否...