中文在C C 中的處理和漢字亂碼問題

2021-06-26 22:47:56 字數 1626 閱讀 1002

中文在c/c++中的處理和漢字亂碼問題

中文字在c/c++中的處理

如今程式設計的語言和程式設計環境隨著中國的發展開始對中文有進一步的支援,但是對中文的支援總體來說是有缺陷的,而且有與編譯環境的不同導致中文在當前的c/c++中有很多問題,而且很多版本對中文的支援是不完全的,就拿dev-c++和vs2005為例,對與msdn的幫助和網上的講述兩者在那些**的支援有很多不同的地方。

而我要討論的就是對於中文在c/c++的應用方法。

首先中文字是在一般char的範圍以外的,所以我們不能用單個char儲存我們的中文字,於是我們大多引進wchar_t這種寬字元的資料型別。但是在我所用過的編譯環境中一般是定義為wchar_t,這是c++語言中認可的定義,他的空間就和unsigned short的大小一樣,所以有這樣的內部定義:typedef unsigned short wchar_t,他是16位的。

在dev-c++中我們有很多方法是不能用的,對於vs2005,我們可以定義和應用的很多方法和和很多庫函式在dev-c++都不可以用的。如在msdn和很多網路資料中提到的輸入和輸出方法像wcin和wout在dev-c++都是顯示未定義的,也就是說dev-c++是不支援這些方法的。簡單寬字元的輸入和輸出如下:

#include

using namespace std;

int main()

wchar_t a[3];

wcin >> a;

wcout << a << endl;

return 0;

但這樣只能輸入單個漢字字元,如果超過2個中文字就會有溢位的錯誤,而用這樣的方法,雖然我們用了wchar但完全沒有突出我們的目的,它仍然是乙個中文字佔兩個wchar_t單位,而且我們也沒有辦法對裡面的漢字字元進行操作所以這是不可行的,但這是c的用法,在c++中wchar則對其進行了修改,使得中文的支援更加好了。

在c++中,wchar_t是語言內建的資料型別,wchar_t的長度是由實現決定的。現在我們正式開始討論中文在我們的c++中的支援和應用的問題。

c++是一種很好的語言,它為了適合不同的地域語言的開發,它加入了乙個叫做locale包的標頭檔案,裡面定義了不同語言和語言的縮寫。這是我們使用wchar_t進行中文的個方面的操作的乙個重要的環節。對於我們的輸入輸出有很重要的影響。

首先我們的應用事例是這樣的:

#include

#include

using namespace std;

int main()

locale loc( "chinese-simplified" );

wcin.imbue(loc);

wcout.imbue( loc );

//上面三行**和setlocale(lc_all,"chs");作用是一樣的。

wchar_t c[4];

wcin >> c;

wcout << c 在這裡我門用到了#include 用來包含這個標頭檔案,然後生成乙個locale的物件,裡面的引數是只採用中文,接著我們對我們的輸入和輸出進行imbue的設定,是用來changes the locale的作用。於是我們輸入和輸出就會變成我們所需要的以中文字的為單位的儲存過程。上例中的c[4] 則可以輸入3個中文字,最後乙個是』\0』,這樣就初步達到了我們所要求的效果。同時我們就可以取出我們要的每個定位的中文字元,進行和char同樣的資料處理。

在eclipse中中文漢字亂碼的解決方案

1 當在usxjmceclipse中開啟乙個檔案後發現有中文亂碼後,千萬不能修改這個檔案內容,一旦改過這個檔案的內容,那怎麼修改編碼也沒用了,只能重新匯入。2 當開啟檔案發現亂碼後第一步是關閉這個檔案,然後在這個檔案上右鍵,選擇屬性,然後選擇編碼,先選擇utf8,然後確認儲存後開啟檔案檢視是否是亂碼...

在MySQL中插入資料時遇到的中文亂碼問題

當向mysql資料庫插入含有中文的資料時,insert into s user userid,username,logonname,logonpwd values 1,超級管理員 admin admin 出現亂碼問題,可以適用show variables like character 來檢視當前資料...

web中中文亂碼的處理

在計算機中,只有二進位制的資料,不同字元對應二進位制的規則,就是字元的編碼。常用字符集 ascii碼 iso8859 1碼 gb2312和gbk unicode utf 8 出現亂碼的解決方案 1 以post方法提交的資料中有中文字元,可以在獲取請求引數值之前,呼叫request.setcharac...