讓繁體程式不再顯示亂碼

2021-04-14 09:01:49 字數 2135 閱讀 2451

一般常用的並且容易造成混淆的

locale有3

種:system locale, user locale, thread locale

1.system locale

:系統區域設定。決定了非

unicode

程式所使用的**頁,如下:

對應的code page

可以用getacp

和getoemcp

來獲得。

system locale

無法被api

修改,但是可以用

getsystemdefaultlcid

和getsystemdefaultlangid

獲得。lcid

和langid

後面會解釋。 2.

user locale

:使用者區域設定,決定了各種標準和格式的定義,如數字,日期等,如下:

是不能被

api修改的,只能由使用者設定。可以通過

getuserdefaultlcid

和getuserdefaultlangid

獲得。同樣的,區別後面會提到。 3.

thread locale

:執行緒相關的區域。初始值為當前的

user locale

,可以使用

getthreadlocale

和setthreadlocale

獲取和修改。

1.langid

language id

,也就是語言

id。代表不同的語言,比如

english

,chinese

,等等。

lang id (16 bit)=primary language id(10 bit) + sub language id(6 bit)

,如下:

sub language id:6

primary language id:10

primarylanguage

代表主語言,比如英語

sub language

代表子語言,也就是語言的亞種,如美式英語

(en-us)

,或者英式英語

(en-gb)

,對應的子語言為

us/gb。

2.lcid

locale identifier

,代表locale

資訊,等價於

langid (16 bit) + sort id (4bit) + reserved (12)

,如下:

reserved : 16

sort id : 4

lang id: 16

extern capihook g_multibytetowidechar;

// 注意winapi 必須和原來的程式一樣!!

int winapi hook_multibytetowidechar(

uint codepage,         // code page

dword dwflags,         // character-type options

lpcstr lpmultibytestr, // string to map

int cbmultibyte,       // number of bytes in string

lpwstr lpwidecharstr,  // wide-character buffer

int cchwidechar        // size of buffer

)77ea8b1f  |.  e8 8987ffff   call kernel32.getuserdefaultlcid         ; [getuserdefaultlcid

終於讓fat格式的U盤不再顯示亂碼了

我使用的ubuntu 8.04.1,kde4.1.2桌面環境,一直以來存在乙個問題,如果掛載fat檔案格式的u盤或者可行動硬碟時,中文資料夾和檔案的名字就變成了一堆的?在網上查閱了很多的資料,目前找到了一下這個可行的解決方案。修改 usr share hal fdi policy 10osvendo...

如何讓Toast訊息在應用退出後不再顯示

android中toast的訊息是放在乙個佇列中的,系統會依次從佇列中取出並顯示。而我們在應用中,有時候希望在應用退出後不再顯示還未顯示過的toast訊息。比如,在 中訪問某個網路介面,待其返回後給出相應的toast資訊提示使用者,然而有時候我們應用已經退出 或不再前台 了,還沒有返回結果,但仍然會...

讓你的應用程式不再對的改動「感冒」 二

使用聯接檢視實現複雜的需求 使用乙個聯接的檢視把前面的例子帶到更高的層次 允許我們的應用訪問多個表的資訊。擴充套件前面的例子 dropviewhr.bv employees createorreplaceviewhr.bv employees empid,fname,lname,email,hire...