公司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)