程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言:寬字符集操作函數(unicode編碼),字符集unicode

C語言:寬字符集操作函數(unicode編碼),字符集unicode

編輯:關於C語言

C語言:寬字符集操作函數(unicode編碼),字符集unicode


C語言:寬字符集操作函數(unicode編碼)

字符分類:
    寬字符函數          普通C函數描述
  iswalnum()        isalnum()     測試字符是否為數字或字母
  iswalpha()        isalpha()     測試字符是否是字母
  iswcntrl()        iscntrl()     測試字符是否是控制符
  iswdigit()        isdigit()     測試字符是否為數字
  iswgraph()        isgraph()     測試字符是否是可見字符
  iswlower()        islower()     測試字符是否是小寫字符
  iswprint()         isprint()     測試字符是否是可打印字符
  iswpunct()        ispunct()     測試字符是否是標點符號
  iswspace()        isspace()     測試字符是否是空白符號
  iswupper()        isupper()     測試字符是否是大寫字符
  iswxdigit()        isxdigit()    測試字符是否是十六進制的數字

大小寫轉換:
  寬字符函數         普通C函數描述
  towlower()        tolower()     把字符轉換為小寫
  towupper()        toupper()     把字符轉換為大寫

字符比較:      
    寬字符函數            普通C函數描述
  wcscoll()         strcoll()     比較字符串

日期和時間轉換:
  寬字符函數描述
  strftime()                  根據指定的字符串格式和locale設置格式化日期和時間
  wcsftime()                  根據指定的字符串格式和locale設置格式化日期和時間, 並返回寬字符串
  strptime()                  根據指定格式把字符串轉換為時間值, 是strftime的反過程

打印和掃描字符串:
  寬字符函數描述
  fprintf()/fwprintf()              使用vararg參量的格式化輸出
  fscanf()/fwscanf()              格式化讀入
  printf()                      使用vararg參量的格式化輸出到標准輸出
  scanf()                      從標准輸入的格式化讀入
  sprintf()/swprintf()              根據vararg參量表格式化成字符串
  sscanf()                      以字符串作格式化讀入
  vfprintf()/vfwprintf()          使用stdarg參量表格式化輸出到文件
  vprintf()                      使用stdarg參量表格式化輸出到標准輸出
  vsprintf()/vswprintf()          格式化stdarg參量表並寫到字符串

數字轉換:
  寬字符函數        普通C函數描述
  wcstod()        strtod()       把寬字符的初始部分轉換為雙精度浮點數
  wcstol()        strtol()       把寬字符的初始部分轉換為長整數
  wcstoul()        strtoul()     把寬字符的初始部分轉換為無符號長整數

多字節字符和寬字符轉換及操作:
  寬字符函數描述
  mblen()                      根據locale的設置確定字符的字節數
  mbstowcs()                  把多字節字符串轉換為寬字符串
  mbtowc()/btowc()             把多字節字符轉換為寬字符
  wcstombs()                  把寬字符串轉換為多字節字符串
  wctomb()/wctob()              把寬字符轉換為多字節字符

輸入和輸出:
  寬字符函數         普通C函數描述
  fgetwc()        fgetc()          從流中讀入一個字符並轉換為寬字符
  fgetws()        fgets()          從流中讀入一個字符串並轉換為寬字符串
  fputwc()        fputc()          把寬字符轉換為多字節字符並且輸出到標准輸出
  fputws()        fputs()          把寬字符串轉換為多字節字符並且輸出到標准輸出串
  getwc()         getc()        從標准輸入中讀取字符, 並且轉換為寬字符
  getwchar()      getchar()         從標准輸入中讀取字符, 並且轉換為寬字符
  None              gets()          使用fgetws()
  putwc()          putc()          把寬字符轉換成多字節字符並且寫到標准輸出
  putwchar()       putchar()         把寬字符轉換成多字節字符並且寫到標准輸出
  None               puts()          使用fputws()
  ungetwc()        ungetc()          把一個寬字符放回到輸入流中

字符串操作:
  寬字符函數             普通C函數描述
  wcscat()              strcat()    把一個字符串接到另一個字符串的尾部
  wcsncat()             strncat()    類似於wcscat(), 而且指定粘接字符串的粘接長度.
  wcschr()              strchr()    查找子字符串的第一個位置
  wcsrchr()             strrchr()    從尾部開始查找子字符串出現的第一個位置
  wcspbrk()             strpbrk()    從一字符字符串中查找另一字符串中任何一個字符第一次出現的位置
  wcswcs()/wcsstr()    strchr()    在一字符串中查找另一字符串第一次出現的位置
  wcscspn()             strcspn()         返回不包含第二個字符串的的初始數目
  wcsspn()              strspn()          返回包含第二個字符串的初始數目
  wcscpy()              strcpy()          拷貝字符串
  wcsncpy()             strncpy()         類似於wcscpy(), 同時指定拷貝的數目
  wcscmp()              strcmp()          比較兩個寬字符串
  wcsncmp()             strncmp()         類似於wcscmp(), 還要指定比較字符字符串的數目
  wcslen()              strlen()          獲得寬字符串的數目
  wcstok()              strtok()          根據標示符把寬字符串分解成一系列字符串
  wcswidth()             None              獲得寬字符串的寬度
  wcwidth()              None              獲得寬字符的寬度

另外還有對應於memory操作的 wmemcpy(), wmemchr(), wmemcmp(), wmemmove(), wmemset()

 


對於Unicode與多字符字集

CString在Unicode下一個字節占16bit,在ascii下占8bit,
改成char數組後在什麼環境下都一樣的
在你不知道另一端是什麼環境的情況下傳輸數據最好使用 明確的變量類型
 

mrp中,unicode編碼與gb編碼有什不同

UNICODE,GB2312與ANSI的區別
什麼是ANSI,什麼又是UNICODE呢?其實這是兩種不同的編碼方式標准,ANSI中的字符采用8bit,而UNICODE中的字符采用16bit。(對於字符來說ANSI以單字節存放英文字符,以雙字節存放中文等字符,而Unicode下,英文和中文的字符都以雙字節存放)Unicode碼也是一種國際標准編碼,采用二個字節編碼,與ANSI碼不兼容。目前,在網絡、Windows系統和很多大型軟件中得到應用。8bit的ANSI編碼只能表示256種字符,表示26個英文字母是綽綽有余的,但是表示漢字,韓國語等有著成千上萬個字符的非西方字符肯定就不夠了,正是如此才引入了UNICODE標准。
在軟件開發中,特別是使用C語言的一些有關字符串處理的函數,ANSI和UNICODE是區分是用的,那麼ANSI類型的字符和UNICODE類型的字符如何定義,如何使用呢?ANSI和UNICODE又如何轉換呢?
一.定義部分:
ANSI:char str[1024]; 可用字符串處理函數:strcpy( ), strcat( ), strlen( )等等。
UNICODE:wchar_t str[1024];可用字符串處理函數
二.可用函數:
ANSI:即char,可用字符串處理函數:strcat( ),strcpy( ), strlen( )等以str打頭的函數。
UNICODE:即wchar_t 可用字符串處理函數:wcscat(),wcscpy(),wcslen()等以wcs打頭的函數。
三.系統支持
Windows 98 :只支持ANSI。
Windows 2k :既支持ANSI又支持UNICODE。
Windows CE :只支持UNICODE。
說明
1 在COM裡面只支持UNICODE。
2.Windows 2000整個OS系統都是基於UNICODE的,為此在windows 2000 下使用ANSI是需要付出代價的,雖然在編碼上不用任何的轉換,但是這種轉化是隱藏的,是占用系統資源的(CPU,內存)。
3 在Windows 98下必須使用UNICODE,則需要自己手動的編碼切換。
四.如何區分:
在我們軟件開發中往往需要即支持ANSI又支持UNICODE,不可能在要求類型轉換的時候,重新改變字符串的類型,和使用於字符串上的操作函數。為此, 標准C運行期庫和Windows 提供了宏定義的方式。
在C語言裡面提供了 _UNICODE宏(有下劃線),在Windows裡面提供了UNICODE宏(無下劃線),只要定了_UNICODE宏和UNICODE宏,系統就會自動切換到UNICODE版本,否則,系統按照ANSI的方式進行編譯和運行。
只定義了宏並不能實現自動的轉換,他還需要一系列的字符定義支持。
1. TCHAR
如果定義了UNICODE宏則TCHAR被定義為wchar_t。
typedef wchar_t TCHAR;
否則TCHAR被定義為char
typedef char TCHAR;
2.LPTSTR
如果定義了UNICODE宏則LPTSTR被定義為LPWSTR。(以前一直不知道LPWSTR是什麼東東,終於明白了)
typedef LPTSTR LPWSTR;
否則TCHAR被定義為char
typedef LPTSTR LPSTR;
補充一下:
UTF-8是可以用於真正的流式傳輸的,Unicode是一種編碼方案
我的理解是UTF-8是Unicode的一種具體實現。類似......余下全文>>
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved