[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)

原文地址:https://www.cnblogs.com/tengwei6328/p/12399144.html

时间: 2024-11-05 20:48:39

[VB.NET Tips]StrConv简体转繁体在繁体操作系统下显示为乱码的相关文章

繁体(正体)系统显示简体 乱码

原因:系统的编码问题 比如我在简体系统中卸了一段代码,英文的没问题,中文注释会变成如下: #include<iostream> #include<vector> using namespace std; #define N 10 struct Node{ //袨怓諾潔攷誹萸 Node(Node * par, bool lft) { parent= par; left = lft; } Node *parent; //硌砃邧賦萸腔硌渀 bool left; //絞賦萸岆邧腔酘

[VB.NET Tips]Try...Catch...End Try的另一种用法

有时在调用一个方法时,会进行异常处理.但是当方法内部出现错误时,无法快速定位到是哪一行代码有问题. 下面介绍一下Try的另一个用法: Try...Catch ex As Exception When expression 当expression为True时处理异常,否则把异常抛到上一层调用. Dim isRelease As Boolean = True '确定是否是Release版本 Sub Main() Dim reuslt As Integer #If DEBUG Then isRelea

[VB.NET Tips]再谈字符串连接之内置池

CLR自动维护一个称为"内置池"(暂存池)(intern pool)的表,在编译时此表包含程序中声明的每个唯一的字符串常量的单个实例,以及以编程方式创建的String类的任何唯一实例. 内置池被实现为散列表.使用散列表即表示,一个字符串可以通过一个数字或"散列码"来表示.这样比较和搜索字符串就非常有效,因为这不是逐个字符比较字符串,而仅仅比较散列值. 内置池节省字符串存储空间.如果将一个字符串常量赋给几个变量,则每一个变量引用内置池中相同的常量,而不是引用具有相同值

Windows程序员必须知道的字符编码和字符集

 字符编码 (Character encoding) 在存储和传递文本过程中,为了使得所有电脑都能够正确的识别出文本内容,需要有一个统一的规则. 2. 字符集 (Character Set) ) 一般情况,一种编码方式对应一种字符集.如 ASCII,对应 ASCII 字符集.GBK 编码方式对应 GBK 字符集.但是也有一种编码方式,多种字符集的,Unicode 字符集有多种编码方式,如 utf-8,utf-16 等.  3.  ASCII ASCII(American Standard Cod

KitchenDraw.v.4.52.Multilingual(包括简体中文。著名的橱柜、衣柜和卫浴设计软件)

SignatureCAD.Squiggle.v5.2.0(将CAD设计转化成手绘风格样图的软件) SofTech.DesignGateway.Professional.v2002-151 SofTech.ExpertCAD_v7.3a SofTech.Prospector_v5.4 SofTech.ToolDesigner_v7.3 SolidVIEW.pro.2003.V1 Solutionware GEOPATH v4.1(模具设计软件) Symmetrica 3D v3.0 Torro-S

JewelCAD.Pro.v2.2.3.build.20190416 1CD

Allcad.ProArt.v1.5(刺绣设计CAD软件) Instant.Stitch.PM.Stitch.Creator.2.0-ISO 1CD(十字绣图案软件) PE-Design.v6.0-ISO 1CD(刺绣设计) 田岛Tajima.DGML.XI-ISO 1CD(田岛绣花设计软件) 田岛Tajima绣花软件 v7.02F 金昌 EX9000 印花智能设计分色系统 2003 富怡绣花图艺系统 4.1 1CD 天虹电脑绣花管理系统5.98c 时高服装CAD系统(Cloths cad) v

openerp 打印报表pdf中文乱码解决办法

环境 : ubuntu 12.04 OpenErp 7.0 设置好了语言为中文简体 ,此时打印 报表,中文显示为乱码. 首先 cd /usr/share/fonts/truetype/ 按照网上的方法 下载字体库: wget http://okay.googlecode.com/files/DejaVuSans-Oblique.ttf wget http://okay.googlecode.com/files/DejaVuSans-BoldOblique.ttf wget http://okay

项目国际化时,中文简体转繁体的自动化方案

最近笔者所在的项目(该项目已经开发长达5年)要实现国际化.一想便知,大部分工作则是抽取简体中文资源文件,并再拷贝一份繁体中文的资源文件. 为了极大限度的减少重复劳动,同事们可谓八仙过海,各显神通.经过一段时间的查找.测试,共同交流各自的方式,并从中选取最佳方案,推广整个项目组. 以下是一同事的方案: 一.抽取简体中文的资源文件(这一步暂时无法省略,全部手动完成): 二.使用在线工具,将简体中文转为繁体中文(网址:http://xh.5156edu.com/jtof.php): 三.使用在线工具,

游戏开发中使用简体和繁体

如果游戏中的字体有繁体版和简体版,那么字体要如何处理呢? 说一下我们游戏现在用的方法大概思路: 多语言翻译表: zh_cn.xls ,zh_hk.xls ,ja_jp.xls 字库:CommonFont.ttf 里面同时包含简体,繁体,日文 读取:根据配置文件加载相应的文字翻译表 但是一般网上下载的字体都是分为 xx简体.ttf,xxx繁体.ttf,但就如何把这两种字体合并到同一个字体中呢?这需要一个工具 FontCreator  相关知识传送门: 字体的编码问题:GB2312(大陆字体编码)