[VB.NET Tips]StrConv简体转繁体在繁体操作系统下显示为乱码
程序员文章站
2022-03-10 18:33:26
公司ERP系统(WINFORM)要搞个繁体版,供中国*同胞使用。 为了简便起见,写了几个方法,在Form_Load里调用。 核心的还是这一句:objControl.text = StrConv(objControl.text, VbStrConv.TraditionalChinese) 在简体版W ......
公司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方法,还有第三个参数。
public function strconv(str as string, conversion as microsoft.visualbasic.vbstrconv, optional localeid as integer = 0) as string
查了msdn也没有结果,最后在网上查到了相关资料。
毛病就出这个localeid这个参数上,这个参数指的是转换后的语言的代码。
以下是我在网上搜索到的windows下常用语言以及对应的代码
语言 | 代码 |
---|---|
中文(香港特别行政区) | 3076 |
中文(中国) | 2052 |
中文(*) | 1028 |
英语(美国) | 1033 |
在office及vs的安装目录都能看到2052这个目录,代表的就是中文简体。
那我们做一些测试。
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来编码。就不会出现简繁转换乱码的问题。
最终把我的代码改为了:
objcontrol.text = strconv(objcontrol.text, vbstrconv.traditionalchinese)
上一篇: Flink学习笔记之三Flink运行架构
下一篇: MongoDB入门(介绍、安装)