说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

VB中的Unicode 和 Ansi 格式

HTML文档下载 WORD文档下载 PDF文档下载
VB中的Unicode 和 Ansi 格式
Visual Basic 32-bit 版本的字串处理采用 Unicode,也就是说字串在 VB 内部是以Unicode 的格式来存放。何谓 Unicode?简单的说,就是每一个字符都是以 2-byte 的形式表示,而每个「实体字符」就是一个「字符」。因此,
Len("大家好")
Len("abc")
所返回的值都是 3,因为「大」和「a」都是一个字符。

但是这对一些中文字串处理,例如纯文字的数据文件,却是一个大灾难,因为你必须以byte 来定位每个字符,可是 Unicode 却把一切的处理全搞砸了。例如:
Len("Good Morning") 返回 12,而
Len("今天天气很好") 返回 6

对初学者而言,好不容易能使用 VB 来写程序已经是件了不起的事了,却马上在中文处理上挨了一记闷棍,所受到的打击实在不小。但是不要怕,事实上只要再多了解一些指令,就可以把中文处理的问题解决了。

是什么指令呢?最重要的莫过于 StrConv 了。StrConv 函数的语法为:StrConv(待转换字串, 转换格式)
其中转换格式在这里用到的是:
vbUnicode 将 Ansi 字串转换为 Unicode
vbFromUnicode 将 Unicode 字串转换为 Ansi
将字串转成 Ansi 之后,所有的字串处理指令都要加个 B,例如:LeftB, RightB,
MidB, ChrB, InstrB, LenB, InputB 等。例用这些指令来处理就行了。

当你处理完毕之后,你可以再将它再转回 Unicode,这样就可以使用一般的字串处理指令了。这样讲看得懂吗?如果还是不了解,看看下面的实例说明:
简易使用范例
看看下面的基本范例您应该就会对 VB 的字串处理方式有些概念。

Private Sub Command1_Click ()
Dim sUnicode As String
Dim sAnsi As String
' Unicode 运算
sUnicode = "王小明,A123456789,651023,上海市中山路100号,(02)2345678"
Debug.Print Len(sUnicode) ' 返回 44
Debug.Print Mid$(sUnicode, 5, 10) ' 返回 A123456789
Debug.Print Instr(sUnicode, "上海市") ' 返回 23
' 将 Unicode 字串转成 Ansi
sAnsi = StrConv(sUnicode, vbFromUnicode)
' Ansi 运算
Debug.Print LenB(sAnsi) ' 返回 54
Debug.Print MidB$(sAnsi, 8, 10) ' 返回 ?????,因为忘了转回 Unicode
Debug.Print StrConv(MidB$(sAnsi, 8, 10), vbUnicode) ' 返回 A123456789,请注意转回 Unicode 的动作一定要做

Debug.Print InStrB(sAnsi, StrConv("上海市", vbFromUnicode)) ' 返回 23, 不要忘了要把"上海市"也转成 Ansi,否则会找不到
End Sub
读入文本文件
在 VB 的小技巧中,有一个是快速读文件法:
Private Sub Command1_Click ()
Dim sFile As String
Open "C:\filename.txt" For Input As #1
sFile = Input$(LOF(1), #1)
Close #1
End Sub

但是很不幸地,如果你读取的文件内含中文字,那上面这段程序会出现 Input pastend of file 的错误。因为 LOF 返回的是文件的 byte 数,而 Input 函数读取的是字符数,由于文件内含中文,因此文件中的字符数将会小于 byte 数,于是就发生错误了。要解决这个问题,我们就要用到 StrConv 和 InputB 这两个函数了:
Private Sub Command1_Click ()
Dim sFile As String
Open "C:\filename.txt" For Input As #1
sFile = StrConv(InputB$(LOF(1), #1), vbUnicode)
Close #1
End Sub
上面修正程序先用 InputB 将文件读进来,不过使用 InputB 所读入的文件是 Ansi格式的,所以要再用 StrConv 转成 Unicode 才行。随机数据文件许多文字数据文件是以固定字节的位置来加以区格,例如下面的数据格式:王小民650110上海市中山路100号 (02)1234567
张大呆660824花莲县大甲镇广东街23号(03)9876543

像这种类型的文件要如何处理呢?这是就必须用到 Type 以及 byte array 了。
Private Type tagRecord
Username(5) As Byte ' 姓名 6 bytes
Birthday(5) As Byte ' 生日 6 bytes
Address(21) As Byte ' 地址 22 bytes
TEL(11) As Byte ' 电话 12 bytes
CrLf(1) As Byte ' 换行字符 2 bytes
End Type

Private Sub Command1_Click()
Dim uRecord As tagRecord
Open "C:\filename.dat" For Random As #1 Len = LenB(uRecord)
Get #1, 2, uRecord ' 取第二笔数据
With uRecord ' With ... End With 应该会用吧
Debug.Print .Username ' 返回 ???
Debug.Print StrConv(.Username, vbUnicode) ' 返回 "张大呆"
End With
Close #1
End Sub

在这个例子中,一定要用到 byte array,因为只有 byte array 才能正确地定位到每个 byte 的位置。以前使用字串来定位的方法已经不适用了,千万要记住!但是使用byte array 所读入的数据是 Ansi 格式,若要处理或是做运算的话,记得还要转成Unicode 格式才行。

[●] 使用 Byte Array
除了上面必须使用 byte 精确定位的例子之外,纯文字的处理基本上是用不到 bytearray 的。byte array 通常是用在处理 binary 数据。这方面的问题我们将另文讨论。看吧!只要熟悉使用 StrConv,你就可以在 Unicode 及 Ansi 格式之间自由自在地变来变去,相信当您看完这篇文章之后,对处理中文应该不再烦恼了吧!


《近匠》SENSORO CTO赵东炜:解密iBeacon生态 我由Angular转向React,为什么? 产品设计中的九个注意事项 昂贵、复杂、不可靠!智能家居产品的尴尬现状 Facebook的CIO都做些什么? 穷游网CTO黄向阳:成果与价值是最好的驱动力 2015移动游戏行业方向标:创业者必须关注的几个领域 基于Python的行为驱动开发实战 面向WP和Android!微软车库发布多款免费应用 GRPC:谷歌发布的首款基于HTTP/2和protobuf的RPC框架 革命,就是现在!——CES 2015行纪 HTML5游戏引擎排行榜 Construct 2最受欢迎 2015手游营销新趋势:电视广告,及其投放逻辑 详解下一代开源混合应用框架Reapp 应用内一键交易!Google公布Android Pay项目 Timehop为什么要放弃Rails,转向Go? 无线充电技术走入客厅 宜家推出“Home Smart”系列 发布仅一年,虚幻引擎4宣布完全免费! HTML5初学者福利!11个在线学习网站推荐 Qualcomm发布Snapdragon 820与超声波指纹识别技术 App Store应用僵尸化:没品质没资本的必然走向 Unity 5正式发布:支持21种平台、个人版免费! 创新高性能移动UI框架——Canvas UI 框架 取精华、去糟粕!适合iOS开发者的15大网站推荐 Swift如何优化性能? 【程序员电子刊精选】明道CEO任向晖:企业也需要养成好习惯 你信吗?重构软件并不会改善代码质量 融合VR与AR:uSens推出虚拟现实手机头盔 4月17-18日,OpenStack、Spark、Container齐聚OpenCloud 2015 第四代CSS选择器,那些让你激动的新特性 联通WO+开放平台“App计费 ” 保障手机应用付费安全 PB简单画图?保存到库表中? 用程序代码建立表结构的问题 怎么在状态栏中加入竖线分隔,而且调整字体的大小? 请高手帮帮我!!!! jbuilder4的enterprise setup需要weblogic51,但我的是weblogic6,应该怎样才能让jbuilder支持6啊? 关于数据库的并发操作 谁知道哪里有vb下载? 哪有可下载的AUTOCAD2000 如何用VB实现存折的打印???? 请教给TImage加滚动条的问题 我和她在一起的话,会开心吗 请大家看看这条语句有什么错? 关于isdn在win2000下共享的问题 各位水友,有力的出力,没力的看看,拜托 请从位高手帮小弟解决一个棘手的问题……………………多谢!!!!!!! ALLTEC(荔枝)兄弟,兄弟我接帖太快 :( 請這邊來. ★★★ 救命啊! VC 用ODBC访问 Access 数据库的问题 guo->你在www.linuxforum.net中叫什么?有个guoemail是你吗? 软件发布:市场摊位租赁管理系统Ver1.0 软件发布:量和单位转换软件(免费版) 软件发布:五笔快打 在listview中的各个记录listitem中,有没有双击记录的事件 软件发布:伏羲服装鞋业购销存管理系统 软件发布:进销存商务管理pcft-jxc 征集各地童谣.唤醒儿时记忆! 今天我请客! 有关vb调用excel的问题! 有没有关于BDE的单独的分发程序? VB中报表预览打印能不能实现象EXCEL中一样的“按比例缩放”?如何实现? 单机版流量统计 关于Delphi6的安装问题 动态计算公式怎么实现?? 常用的英文字体是什么? 在通信过程中怎样做到防监听、防篡改? 各位大虾现欲用java开发一套网上投票表决系统 应该看什么书?用什么开发工具?(一定给分!) 关于winsock的问题,急急 怎样使用VB6中TREEVIEW控件? 我真的要疯了! 这里有很多Delphi6的控件! 如何在ASP中传递多个参数?displaymsg.asp?page=1在后面我还想加另外一个参数 有没有喜欢画漫画的? 如何得到ActiveX控件的窗口句柄 请问mif文件格式以及、读写方法?高分求解 sco unix的root口令忘了,谢谢. 在PowerBuilder中使用Microsoft Web浏览器控件 ,这个控件在ole中怎么没有啊? 急盼有人答复!!!!!! 急!急!编译exe时出现:link errors提示 具体提示:create of executable file failed? 小笨笨一问 年年岁岁花相似,岁岁年年人不同 VC++初学者的几个大烦恼!(苦呀,谁来拯救我这个VC小兵?) 请教在DELPHI中调用API发送EMAIL的问题!!!!! 求2道数学题的解法1.已知非空集合A={(x,y)|(a*2-1)x+(a-1)y=15},B={(x,y)|y=(5-3a)x-2a}.若A∩B=空集,求a的值.2.已知集合A={x|x*2-4mx+2m+6=0,x∈R},B={x|x<0,x∈R},若A∩B≠空集,求实数m的取值范围.a*2表示a 用方程和式子做,最好再简单的讲一下方法.张师傅加工一批零件,原计划每天加工50个,为了提前10天完成,他实际每天加工75个,张师傅实际多少天完成任务? 有意者,进.位少年选手,顺风跑90米用10秒;同样的风速下,逆风跑70米,也用10秒钟,无风时,他跑100米需要 时间. 面积为49平方米的长方形的周长是多少?.注意是长方形,不是正方形 给个准确的数啊,还有解法 1.如图a、b,是学校游泳池的平面图.比例尺都是1:1000.请观察这两个游泳池,并计算这两个游泳池的实际面积.如果你去游泳,现a有40人,b有100人,你准备到那个池中去游泳?(两问皆需算式) 育才小学一年级有300人,二年级学生人数是一年级的六分之五,又是全校学生人数的五分之一,全校有多少人?张阿姨买了一套服装一共用去380元,其中裤子的价钱是上衣的价钱的三分之二,裤子比 三个人同时吃3个西红柿,用了3分钟吃完,6个人吃6个西红柿需要几分钟吃完?(仅用加减法列个式子) 下列结论错误的是()A.长度之比为1:2:3的三角形是直角三角形B.三个边长之比为3:4:5的三角形是直角三角形C.三个边长之比为8:16:17的三角形是直角三角形D.三个角度之比为1:1:2的三 小学六年级语文,数学题,急啊!谁帮帮我.回答得好我会加分的.数学:找规律:4,2,1,2分之1,4分之1,(),(),() 8分之1,32分之1,4分之1,16分之1,(),(),()应用题:1,一个长方形的宽是7分之5 0952873641 3的前面第三个的后面第五位是几?到底多少呀 能不能讲下 5555555 某公司托运物品,质量为a(a 1.有一堆圆锥形的沙土,底面周长37.68m,高5m,把这些土在宽15.7m的路上铺4cm厚,可以铺多少米?2.一个圆柱形玻璃容器的底面直径为12cm,它的里面装有一部分水,水中浸没着一个高9cm的圆锥形铁块,当 小学六年级奥数题,帮帮忙,最好有过程,谢谢!菜园里西红柿获得丰收,手下全部的八分之三是,装满一些筐还多24千克,收完其余部分时,又刚好装满6框,求共收西红柿多少千克? 在RT三角形ABC中,角C=90度,AD平行BC,角ABE=2角CBE,求证ED=2ABBD把角ABC分为角CBE和EBA,BE延长到D点,AD平行与三角形ABC底边BC,ADB也构成一个钝角三角形另外,不能用三角函数做,只能用几何 有浓度为30%的硫酸溶液若干,加了一定量的水后,稀释成浓度为24%的硫酸溶液,再加入同样多的水后,浓度将变成百分之几?能不能给我再详细点、我一定给多分。 小学六年级奥数题 要过程的在第16届广州亚运会上,中国代表团取得了金牌第一的成绩.获得的金牌数比铜牌数的2倍还多3块,如果金牌再多1块,那么铜牌就是金牌的49%,银牌是金牌数的59.5%.问 问一个初二的数学题,要解法! ! !有一个三位数,现将最左边的数字移到最右边,则比原来的数小45;又知百位数字的9倍比去掉百位数字后形成的两位数小3,试求原来的三位数是多少?要具体的解 )六(3)班男生人数比女生人数少20%,该班女生人数是男生人数的百分之几?男生人数是女生人数的百分之几?(急、、、、、) 两段圆柱的体积之差是314立方厘米.若将它们分别削成底面是最大正方形的长方体,则两个长方体体积之差是多少立方厘米? 小学三年级一题有多种解法的数学题 三个不同的整数a,b,m之间有如下关系b×m=a,能否说整数a一定能被整数b整除?简要说明理由 实验室了有两个等高的容器,圆锥体容器的半径为9厘米,圆柱体容器的半径是6厘米,现在圆锥体容器装满水倒入圆柱体容器中,这是水深比容器的高度的6/7低3厘米,两个容器的高是多少厘米? 求助:三年级一道数学题的解法.有两个一样的信箴,如果一个信封里放1 张信纸,还剩50张信纸;如果每个信封放3张信纸,还剩50个信封.请问:有几个信封,有几张信纸?不要设未知数. 一张长方形铁板的宽是30cm,四个角各减去一个小正方形,做成一个高5cm的长方体容器,容积的300ml(铁皮厚度忽略不计),这张铁皮原来的面积的多少?(每一个数据怎么得来的都说清楚,我不懂) :用10张同样长的纸条粘贴成一条长51厘米的纸条.如果每个粘贴处都重叠1厘米,那么每张纸条长多少厘米? 今年的8月份有5个星期日,4个星期一,那么今年的8月1日是星期几?我的方法是从31是星期日,倒推到3号是第一个星期日,那么1号就知道了.请问有没有更简便的方法? 学校的仪器室地面长4米、宽3米,有边长30厘米的A种方砖每块5元和边长40厘米的B种方砖每块8元,在可以拼接的情况下,用哪种方砖密铺地面比较便宜? 1、一个长方体的长和宽都是5厘米,把它从长的中点截成两个相同的长方体后,得到的一个长方体表面积比原来大长方体表面积少120平方分米,原来长方体的体积是多少?2、两种商品的价格比试7:3 请帮忙解题:一个小学二年级的数学题2个小铅球比一个大铅球重1千克,8个小铅球比5个大铅球轻1千克,算一算,大小铅球各重多少千克?这是二年级的数学题,不能用方程解,但需要列出算式. ①一道应用题牙膏出口处直径为6毫米,小红每次刷牙都挤出1厘米唱的牙膏.这支牙膏可用30次.该品牌牙膏推出的新包装只是将出口处直径改为5毫米,小红还是按习惯每次挤出1厘米长的牙膏.这 1.某单位食堂一月内购买了三次大米,后两次购买数量是前一次的两倍,由于数量增加,每次加个都比前一次优惠10%,共用去2536.8元.如果下月一次性购买同样多的大米,可至少节约多少元?2.一个长 小学五年级数学奥数题的答案?1.( )÷12=1:( )=3/( )=0.5=( )%2.把0.13万改写成以“一”为单位的数是( ),读作( ).3.在括号里填上合适的单位名称.(1)一个鸡蛋重50 1)一汽车销售公司,今年2月份销售了300辆a型汽车,3月份销售a型汽车的数量比2月份下降了24%,预计4月份的销售要比3月份下降1.3个人百分点.问:4月份比2月份销售情况下降了百分十几?2)甲、乙 丙在计算除法(有余数)是,吧除数137写作173,商多3,余数相同.求正确德商和余数 1.边长为自然数,面积为105的长方形.不同的长方形共有几种? 1、一项工程,甲乙两队合做每天能完成全部工程的40分之9,甲队单独做3天,乙队再单独做5天后,可以完成全部工程的8分之7,如果由乙队独做,需要多少天可以完成?2、一项工程,甲乙两人合做4天后, 一辆汽车共载客50人,其中一部分人买A票,每张1.20元;另一部分人买B票,每张1.00元,售票员最后统计出所卖的A票比B票多收入16元.买A票的有多少人?绝对要有解法,带讲解的我可能会追加的!赶快, 几道小学五年级奥数题1、把一个小数的小数部分扩大4倍,这个小时就变成6.6,把这个小数部分扩大8倍,就变成例如9.2,原来这个小数是( )2、从1、2、3、4、5、6中选出四个数字组成一个四位 1.一个圆锥和一个圆柱的高相等,并且圆锥的底面直径是圆柱底面直径的6倍,求圆锥的体积是圆柱体积的多少倍?2.一个圆锥和一个圆柱的体积之比是9:5,底面积之比是4:3.求圆锥与圆柱高之比 要把题目类型和解法写出来, 1、花生的出油率是30%,300千克花生可榨油多少千克?2、2.五年级2班今天有49人到校上课,出勤率为98%,全班共有学生多少人?3.风速在森林地带可比平原减低30%,如果风在森林地带速度每秒是4. 一条公路上有1、2两路公交车.3分钟后是1路车,7分钟后是2路车.小明从家出发走到公路边等车,那么小明等到哪路车的可能性更大? 一个羽毛球4元,一个乒乓球2元.买这些花了100元.如果把羽毛球都换成乒乓球,乒乓球都换成羽毛球,则需要花92元.原来买这些乒乓球和羽毛球各多少个? 几道小学五年级数学题1.办公桌抽屉的长是30厘米,宽50厘米,高15厘米.如果一张办公桌有2个这样的抽屉,做一张桌子需要木板( )平方米.2.“环球”牌涂料分大桶、小桶两中规格包装,大桶8升, 桌上摆有4张卡片,分别写有3、5、6、2并反扣在桌上.任意抽2张,如果组成的两位数是单数就算小明赢,否则就算小红赢,这样公平吗?为什么?我算了出来但总觉得不对, 游乐中心内一个长方形游泳池,长25厘米,宽12.5厘米,深1.2厘米.如果用直径20厘米的进水管向游泳池内注水,水流速度按每分100厘米计算,注满一池水要多长时间? 一项工作,甲单独做要用10小时,乙单独做要用15小时,甲做完三分之一后,两人合作,还需要几小时完成? 六年级上册数学基础训练一道数学题(可能性)举一个例子,说明所发生事件的可能性是不相等的,应该分别是十分之一、五分之二和二分之一. 求助小学六年级寒假作业一道数学题解法甲、乙两人以匀速绕圆形跑道按相反方向跑步,出发点在直径的两个端点,如果他们同时出发,并在乙跑完100米时,第一次相遇,甲跑一圈还差60米时第二次 求十道五年级奥数题加答案题目短一点 小学六年级数学题,是统计与可能性部分的,会的请进! (共3道,共15分,每道5分.)1.袋子里有红球和白球若干个,摸到红球的可能性是十分之七,如果把其中一个红球换成白球,摸到红球的可能性就 求这2道数学题解法1:求f(x)=cosx-1/2cos2x的最大值(x属于R)2:求sin10°sin30°sin50°sin70°的值 急.写出详细的算式,不用解题思路.一、填空.(每空0.(1)800706502读作(),四舍五入到“万”位约是( ).(2)250平方千米=( )公顷 1又1/6时是( )小时( )分(3)1.2=72/( )=( )%.(4)一 事件发生的可能性有( ) 求2道数学题的解法1:tan71+tan49-√3tan71·tan492:(1-tan17)/(1+tan17) + cos146/(1+sin34) 1.张大伯家有一堆小麦,堆成了圆锥形,张大伯量的其底面周长是9.42m,高是2m,这堆小麦体积是多少立方米?如果每立方米小麦的质量为700kg,这堆小麦有多少千克?2.小红去食品店买肉罐头,她看到有 五(1)班和五(2)班同学到扫卫生,没办负责打扫整个操场的一半,五一班完成了本班任务的 四分之三 ,五二班完成了本班任务的得五分之四,两个班分别打扫了操场的几分之几? 急求2道数学题的解法!1.一种书若定价每本10元,可盈利1/4,若想盈利2/5,则应定价为每本()元2.同一种商品,甲将原价降低10元后卖掉,用售价的10%作积累,乙将原价降低20元后,用售价的20%作积累, 要算式,不要方法6.某装订车间的三个工人要将一批书打包后送往邮局(要求每个包内所装书的册数同样多).第一次他们领来这批书的十二分之七,结果打了14个包还多35本.第二次他们把剩下的 (1)体育课上,某班全体男生分成甲、乙两组进行投篮练习,结束后发现:全体男生的平均投篮数是3个;如果乙组再多投7个,那么乙组男生的平均投篮数是4个.已知甲组7名男生共投了20个球.求
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn