c處理某些佔位元組的漢字問題,c 處理某些佔4個位元組的漢字問題

2021-08-16 08:59:05 字數 4909 閱讀 6837

1樓:落月

字符集gb18030是有4個位元組的漢字,c#直接讀的話是亂碼,這種情況應該使用windows api提供的函式來解決才行。

1.windows api對gb18030-2000 的支援

下列 windows api 提供對gb18030-2000 的支援。isvalidcodepage(), getcpinfo(), multibytetowidechar() and widechartomultibyte().

具體說明如下:

1) isvalidcodepage(54936) returns true.

2) getcpinfo(54936, lpcpinfo) returns true.

3) multibytetowidechar(54936, 0, lpmultibytestr, cbmultibyte, lpwidecharstr, cchwidechar) 完成gb18030-2000 字串 lpmultibytestr 到 unicode 字串 lpwidecharstr 的轉換。

4) widechartomultibyte(54936, 0, lpwidecharstr, cchwidechar, lpmultibytestr, cbmultibyte, lpdefaultchar, lpuseddefaultchar) 完成unicode 字串 lpwidecharstr 到 gb18030-2000 字串 lpmultibytestr 的轉換。

2. gb18030 函式庫

微軟4位元組字符集編碼支援包 (ms4bsp- microsoft 4-byte character set encoding support package) 提供了六個函式,這六個函式支援多位元組編碼(多達4位元組)的字串。 這些api 是從windows 95/98/me 提供的wchar (unicode) 函式集中精選出來的。函式名與相應的ansi 和wchar(unicode) 函式完全相同,只是字尾的’a’ 或’w’被’l’替代。

這些函式的引數與相應的’a’版本函式的引數介面完全相同。該支援包可使基於936**頁的應用程式向gb18030 或其他4位元組編碼的轉換更加快捷。

ms4bsp 在windows xp 平臺的實現是作為一個簡單的動態連線庫 – ms4bsp.dll。 每一函式都通過呼叫multibytetowidechar() 函式將任何多位元組字串輸入引數轉換為utf-16編碼格式,然後呼叫相應的 ‘w’ 版本的函式,返回該函式的輸出引數。

該動態連線庫假設當前系統中存在相關的字型,輸入法(ime) 和登錄檔的設定資訊。

該函式集中的預設4位元組字元編碼為54936 (gb18030-2000). 將來版本的ms4bl 可能支援其他4位元組編碼。

介面清單:

codebool exttextoutl(

hdc hdc, // handle to dc

int x, // x-coordinate of reference point

int y, // y-coordinate of reference point

uint fuoptions, // text-output options

const rect* lprc, // optional dimensions

lpcstr lpstring, // string

uint cbcount, // number of characters in string

const int* lpdx // array of spacing values

);bool gettextextentexpointl(

hdc hdc, // handle to dc

lpcstr lpszstr, // character string

int cchstring, // number of characters

int nmaxextent, // maximum width of formatted string

lpint lpnfit, // maximum number of characters

lpint alpdx, // array of partial string widths

lpsize lpsize // string dimensions

);bool gettextextentpoint32l(

hdc hdc, // handle to dc

lpcstr lpstring, // text string

int cbstring, // characters in string

lpsize lpsize // string size

);int messageboxl(

hwnd hwnd, // handle to owner window

lpcstr lptext, // text in message box

lpcstr lpcaption, // message box title

uint utype // message box style

);int messageboxexl(

hwnd hwnd, // handle to owner window

lpcstr lptext, // text in message box

lpcstr lpcaption, // message box title

uint utype, // message box style

word wlanguageid // language identifier

);bool textoutl(

hdc hdc, // handle to dc

int nxstart, // x-coordinate of starting position

int nystart, // y-coordinate of starting position

lpcstr lpstring, // character string

int cbstring // number of characters);

2樓:匿名使用者

佔多少個位元組得看你用的是什麼編碼集。

如果是gbk和gb2312的話,確實是兩個位元組,在windows平臺上會是你預期的兩個位元組。

utf8, 它是變位元組的2個3個4個可能都有的.

什麼是程式語言?一共有哪幾種語言?

3樓:賀淑珍光女

計算機語言的種類非常的多,總的來說可以分成機器語言,組合語言,高階語言三大類。

計算機所能識別的語言只有機器語言,即由0和1構成的**。但通常人們程式設計時,不採用機器語言,因為它非常難於記憶和識別。

目前通用的程式語言有兩種形式:組合語言和高階語言。

組合語言的實質和機器語言是相同的,都是直接對硬體操作,只不過指令採用了英文縮寫的識別符號,更容易識別和記憶。

高階語言是目前絕大多數程式設計者的選擇。和組合語言相比,它不但將許多相關的機器指令合成為單條指令,並且去掉了與具體操作有關但與完成工作無關的細節,例如使用堆疊、暫存器等,這樣就大大簡化了程式中的指令。同時,由於省略了很多細節,程式設計者也就不需要有太多的專業知識。

高階語言主要是相對於組合語言而言,它並不是特指某一種具體的語言,而是包括了很多程式語言,如目前流行的vb、vc、foxpro、delphi等,這些語言的語法、命令格式都各不相同。

計算機程式語言的程式設計軟體需要什麼語言?

最簡單的程式語言是什麼

4樓:源白鶴

其實最簡單的程式語言是scratch,c和vb一點也不簡單

程式語言一共有多少種?

程式語言是什麼?怎麼學程式語言?

5樓:在會昌山玩滑板的諸葛亮

學程式設計是一個很漫長的過程,不要著急,要理論與實踐想結合,例程書籍也是很重要的,看源**對學習也是很有幫助的,等你學完這門vb語言之後,學習別的語言是非常簡單

什麼是程式語言

6樓:拱富貴顧羅

計算機語言的種類非常的多,總的來說可以分成機器語言,組合語言,高階語言三大類

7樓:匿名使用者

程式語言(programming language)是一種被標準化的交流技巧,用來向計算機發出指令,定義計算機程式,讓程式設計師能夠準確地定義計算機所需要使用的資料,並精確地定義在不同情況下所應當採取的行動的一種計算機語言。

程式語言可以分成機器語言、組合語言、高階語言三大類。計算機領域已發明了上千不同的程式語言,而且每年仍有新的程式語言誕生

如果學會了程式設計,在it行業裡很吃香的。

程式語言與程式設計師有什麼區別?

8樓:匿名使用者

程式語言是一種客觀存在的東西,被程式設計牛人發明以後,逐漸完善就成了一種規則!

程式是通過程式設計人員製作編譯來用來解決問題而形成的,寫程式時候需要程式語言,程式語言在程式設計人員的利用下才成形成程式。

說的有點憋!我個人理解,有理解更深的,請賜教!!!

9樓:張少

漢語和中國人的區別!!!

10樓:雨天零度

程式語言分為高階語言

、組合語言和機器語言,比如c語言就是高階語言。那c語言舉例,程式語言跟法語德語一個道理,不一樣的是法語德語是用於我們跟法國人德國人交流,而程式語言是我們跟機器交流的語言類。

可以吧程式解釋為機器讀得懂的文章。高階語言寫的命令轉換成組合語言再編譯成機器語言就成了程式。就像漢語寫成一篇文章轉換成德語的,德國人才看的懂。

程式語言都有哪些?

11樓:小其我的世界

快速瞭解6個程式語言

c語言的預處理命令問題

huge可以看作是一種註釋 可以理解為 char huge graphbuffer int huge size int huge i 這樣雖然這些變數都有不同的作用,但是都有一個共同的目的,在c語言的很多標頭檔案中經常看到這種應用 例如void far cdecl farrealloc void f...

請教有關c字串的處理,請教C 字串處理的問題,字串中間可能包含若干個空格,要求寫個程式將空格轉化為相應的數字

反轉字串 string str console.readline char chr str.tochararray array.reverse chr string strarr array.convertall chr,delegate char c str string.join strarr ...

C語言字串結尾的 0 佔幾個位元組?

0 本身佔一個位元組的空間,但是不算在字串長度內。1一個位元組 sizeof 可以檢視字串所佔位元組數。0 是字串結束的標誌,ascii是0 所佔位元組長度是和char一樣的長度,1個位元組。c語言中abc 0defgh佔多少位元組?字串abc 0defgh,一共佔10個位元組。首先,c語言中每一個...