打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
[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方法,还有第三个参数。

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)
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
C# 简繁体转换
《三字经》简繁体毛笔字帖
全角与半角,简体与繁体之间的转换C#
vb.net 简繁转换 .
VB.net下有个函数strconv可以进行简体繁体转换
布尔值转字符串 0基础学go语言系列
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服