這段時間在架構整個伺服器,雖然前段時間受到了5.12汶川8.0級大**的影響(深切悼念在此次大**中遇難的同胞們),但是,我的工作還是在不斷地向前推進著。為了讓我們的伺服器能夠跨平台(主要是windows與linux),且能支援世界上的各種語言,我寫了乙個跨平台的且支援unicode的庫。
其實,我在之前也有寫過跨平台方面的**,積累了不少的經驗,但在寫這個庫的過程,還是遇到過許多問題,我覺得其中最值得注意的是在unicode的支援上,之前沒有仔細去研究過linux的unicode程式設計,所以也並不知道linux下的unicode與windows下的unicode其實是不一樣的。winodws下的unicode都是用兩個位元組,16位來表示的,也就是ucs2,而linux下的unicode是用四個位元組,32位來表示的。這就導致了同樣的**,在windows與linux中會產生不同的結果。
例如,同樣的**:
wchar_t str = l"測試";
wprintf(l"ls",str);
在windows下能夠編譯通過,但是在linux下卻很可能是不能編譯通過的。這個主要是因為:
windows下的unicode為ucs2,而linux下的unicode為ucs4。
**檔案的編碼問題,windows下用vc儲存的檔案,都是windows.936編碼的,vc也只能識別這種編碼的帶非英文本元的有效**原始檔;而linux下gcc需要的是與系統相關語言編碼的原始檔,如:如果linux下的語言是utf8編碼的,那麼gcc就需要utf8編碼的帶非英文本元的有效**原始檔,否則就會報錯。
所以如果想要讓編寫的**跨平台且支援unicode,那麼就最好不要在有效**中使用非英文本元,鑑於此,可以使用unicode檔案來代替**中的非英文本元。需要注意的是在讀取檔案後,需要根據不同的平台作平台相關的unicode編碼轉換,比如:windows就轉換成utf16(ucs2)的unicode,而linux就轉換成utf32(ucs4)的unicode。
程式設計原理 跨平台
程式設計原理 所謂的跨平台是指程式可以不經處理就在不同平台上執行。而 平台 一詞有很多定義,在本 書中是指作業系統與硬體 處理器 的組合。用編譯型語言寫出來的程式,必須先編譯成機器碼。而機器碼是與底下的平台息息相關的,所 以 用編譯型語言寫出來的程式,無法跨平台 也就是說,無法在不同的平台上執行 解...
跨平台UDP程式設計
跟tcp一樣,網上這類的例子太多了,我這裡綜合了一下,寫成乙個通用型的,linux下跟windows下都能用。如果是查資料看到這裡,我再重講一遍udp,如果講得不好,請見諒。udp跟tcp相比,少了乙個建立連線的過程,所以在server服務中,只需socket,返回乙個socket控制代碼,然後bi...
跨平台 Windows Linux 網路程式設計
一 網路程式設計在windows下和linux下的區別 專案windows linux 主要標頭檔案 winsock.h winsock2.h sys socket.h fcntl.h errno.h等 鏈結庫ws2 32.dll lib 連線是使用引數 lstdc 執行時需要libstdc so....