今天在處理一段程式的時候發現了一些異常情況,就是如果控制台中的設定採用的是簡體中文,程式運行正常,但是如果採用了英文或者其它國家的設定系統就報錯誤。
一般發生這種錯誤主要是因為程式與控制台中的本地設定關係太緊,例如日期格式、本地的金融符號等,但是我的程式是採用RC6的演算法進行一些字串的加密,如果加解密的兩端,本地設定不一樣,解出來的內容就不一致。
呵呵,我的解決辦法是限制使用者必須是在簡體中文的環境中使用,反正都是中國人使用,這樣我就偷懶了,採用的如下代碼。
'讀取本地的語言碼
Private Const LOCALE_USER_DEFAULT = &H400
Private Const LOCALE_ILANGUAGE = &H1
Private Declare Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long
'獲得本地語言碼
Private Function GetLocalLanguageCode() As String
Dim buffer As String * 100
Dim dl As Long
#If Win32 Then
dl = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_ILANGUAGE, buffer, 99)
GetLocalLanguageCode = LPSTRToVBString(buffer)
#End If
End Function
'轉換字串
Private Function LPSTRToVBString(ByVal s As String) As String
Dim nullpos As Long
nullpos = InStr(s, Chr(0))
If nullpos > 0 Then
LPSTRToVBString = Left$(s$, nullpos - 1)
Else
LPSTRToVBString = ""
End If
End Function
'應用如下
If GetLocalLanguageCode <> "0804" Then
MsgBox "本地控制台設定錯誤,必須將控制台設定為中文簡體.", vbCritical, "提示"
End
End If
這樣就限制使用者在規定的本地設定中進行操作,這個並不是很好的辦法,但是夠用就行了。