[VB.NET Tips]StrConv簡體轉繁體在繁體操做系統下顯示爲亂碼

公司ERP系統(WINFORM)要搞個繁體版,供中國臺灣同胞使用。
爲了簡便起見,寫了幾個方法,在Form_Load裏調用。測試

Public Sub TransControlTextToTraditionalChinese(ByRef tpInstance As Form)

        tpInstance.Text = TransTextToTraditionalChinese(tpInstance.Text)

        For Each objControl In tpInstance.Controls

            If TypeOf (objControl) Is MenuStrip OrElse
               TypeOf (objControl) Is ToolStrip OrElse
               TypeOf (objControl) Is StatusStrip Then

                TransControlTextToTraditionalChinese_Tool(objControl)

            ElseIf TypeOf (objControl) Is FlowLayoutPanel Then

                TransControlTextToTraditionalChinese_FlowLayoutPanel(objControl)

            ElseIf TypeOf (objControl) Is Panel OrElse
                   TypeOf (objControl) Is GroupBox Then

                TransControlTextToTraditionalChinese(objControl)

            ElseIf TypeOf (objControl) Is TabControl Then

                TransControlTextToTraditionalChinese_TabControl(objControl)

            ElseIf TypeOf (objControl) Is DataGridView Then

                TransControlTextToTraditionalChinese_DataGridView(objControl)

            ElseIf TypeOf (objControl) Is TextBox OrElse
                   TypeOf (objControl) Is Label OrElse
                   TypeOf (objControl) Is Button OrElse
                   TypeOf (objControl) Is CheckBox OrElse
                   TypeOf (objControl) Is RadioButton Then

                objControl.text = StrConv(objControl.text, VbStrConv.TraditionalChinese)

            End If

        Next

    End Sub

核心的仍是這一句:objControl.text = StrConv(objControl.text, VbStrConv.TraditionalChinese)編碼

在簡體版Win7下運行良好。到了中文(臺灣)繁體版Win7下,直接成了亂碼了。
錯誤展現
真是百思不得其解。操作系統

仔細研究了一下StrConv方法,還有第三個參數。code

Public Function StrConv(str As String, Conversion As Microsoft.VisualBasic.VbStrConv, Optional LocaleID As Integer = 0) As String

查了MSDN也沒有結果,最後在網上查到了相關資料。
毛病就出這個LocaleID這個參數上,這個參數指的是轉換後的語言的代碼。
如下是我在網上搜索到的Windows下經常使用語言以及對應的代碼orm

語言 代碼
中文(香港特別行政區) 3076
中文(中國) 2052
中文(臺灣) 1028
英語(美國) 1033

在Office及VS的安裝目錄都能看到2052這個目錄,表明的就是中文簡體。
那咱們作一些測試。blog

TextBox1.Text = StrConv("我是中國人", VbStrConv.TraditionalChinese, 2052)    '顯示我是中國人
    TextBox2.Text = StrConv("我是中國人", VbStrConv.TraditionalChinese, 1028)    '顯示亂碼  我是中?人
    TextBox3.Text = StrConv("我是中國人", VbStrConv.TraditionalChinese, 1033)    '顯示我是中國人

1028是Windows下的中文(臺灣)代碼。在轉換使用這個代碼表時,不是全部的中文簡體編碼值在繁體中都存在,因此就出現了?號。
而LocaleID默認爲0也就是使用系統默認的,那在中文(臺灣)繁體版操做系統下這個就爲1028.
因此出現了以前的那個亂碼的圖片。
那最好使用1033。表明英文en-US,當使用1033時,遇到中文時就會以Unicode來編碼。就不會出現簡繁轉換亂碼的問題。圖片

最終把個人代碼改成了:ip

objControl.text = StrConv(objControl.text, VbStrConv.TraditionalChinese)
相關文章
相關標籤/搜索