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

讲解一下UNICODE,它和ASCII有什么不同.我很糊涂.

编辑:说三道四文库 发布时间:2017-08-24 11:05
HTML文档下载 WORD文档下载 PDF文档下载
rt
ASCII占1字节,UNICODE占2字节。
因此ASCII表示的字符数最多只能到256,而UNICODE可以达到65536,可以把世界上的各种文字统一编码。
即使是英文,用UNICODE也要2字节。
我也很糊涂..........
关于unicode与ascii的区别,你找本charles petzold的 <<windows 程序设计>>,那里面讲的很清楚的。
有啥糊涂,只要记住:“UNICODE占用两个字节”
Unicode vs 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 past
end 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 精确定位的例子之外,纯文字的处理基本上是用不到 byte
array 的。byte array 通常是用在处理 binary 资料。这方面的问题我们将另文讨
论。

看吧!只要熟悉使用 StrConv,你就可以在 Unicode 及 Ansi 格式之间自由自在地变
来变去,相信当您看完这篇文章之後,对处理中文应该不再烦恼了吧! 

--------------------------------------------------------------------------------
Site
谢了,加分
收藏
收藏 
在IE11中更快地获得您需要的内容 暴露程序员身份的8个行为 英特尔创新应用大赛大评审!创新也有中国风 苹果面临一问题:正源源不断地失去优秀工程师 初学编程者必知的五个网站 大数据基准测试专题论坛:基准测试是一把尚未完成的尺子 大数据应用(下):应用驱动技术,DaaS创造价值 大数据研究与发展专题论坛:大数据在各领域中的应用及发展策略 雅虎新目标:欲收购照片分享网站Imgur 移动开发工具访谈《近匠》第01期:七牛云存储—BaaS进化论 ShareSDK:A轮融资到位!将推社会化评论SDK 70美元,你也能用Raspberry Pi做个专属iBeacon基站 7个鲜为人知却超实用的PHP函数 从管理远程式团队和分布式团队中所获得的宝贵经验 Netflix开源数据流管理器Suro Google新创意:天花板加麦克风 人脑植芯片 苹果获弯曲屏新专利 可给手机弄个大波浪卷 真正的跨平台硬件测试:3DMark已打通PC、iOS、Android 将Chrome浏览器变成终端工具 【开源推荐】AllJoyn:打造全球物联网的通用开源框架 21张图带你走进Google数据中心 Snapchat C轮融资5000万美元 投资方是Coatue Management 又一个被谷歌寄生的平台,Chrome应用启动器现来到OS X上 雷军遇上刘德华:创业、艺术、移动互联网 为了抗衡Android,传微软开始考虑WP和WinRT免费 维护代码库的五个精华实践 微软发布安全补丁 IE11.0.2随之而来 Qt 5.2正式版发布 全面支持移动平台 如何节约手游制作成本?揭秘CocoStudio编辑器强悍功能 市场竞争白热化:三大云服务商上演双十二“三国杀” UCloud联手盛科实现SDN硬件应用 大家好,有没有遇到过这种错误,是什么问题? 问一个比较简单的问题:你们是怎么在MDI窗体中避免多次打开同一个窗口的? 使用Dreamweaver制作网页时,如何使背景图片平铺? 如何得到cview类? 网上邻居问题 函数可以返回个值,触发器能返回个值么? malloc或者new或者其他申请的内存,当程序运行结束后系统能自动回收吗? 关于VC的一个问题? 内存能否混用? 请各位帮帮忙! Application变量为什么提示被调用的对象已与其客户断开连接,急 谁知道啊? 我是新手,谁来帮我???????????? apche+php下怎么禁止用户直接输入地址浏览图片 大家帮忙! 一个关于加密方面的问题 帮忙看看这个错误怎么解决,谢谢! vb.net中怎么切换窗体?? 各位,用perl如何修改二进制文件哪? MY SQL有没有备份语句和恢复语句 第一天上班,放分 # # # # # JSP&XML问题 # # # # # 我能把按扭做成豪杰播放器中的样子吗? 网络高手请进 初学jsp的女生jsp+javabean问题求助!! apche+php下怎么禁止用户直接输入地址浏览图片 请大家指点小弟一个很菜的问题!(小弟感激) 关于C程序移植问题! 请问如何获取端口号 求救,IE6.0上用Accept属性设置文件上传控件的上传文件类型无效? 请告知从哪里可以下载到《vc从入门到精通》电子版 高分请教C/S编程的问题 梁锦松辞职道歉后接受挽留,港府公开董建华责梁信件【转载】 怎样用企业管理器创建一个新的数据库! 关于单引号的非常菜的问题(在线等)谢谢! 请帮我看看这个PL/SQL过程,哪里错了,谢谢(老出错误信息) 怎样使用mscomm.cox控件,怎样读写串口数据,请用例子说明? 求助《《关于图标的问题》》 PB连接不上SYBASE!急!在线! 在任何时间任何地点,都不要找任何理由不学英语 初学者问题50分:关于操作符* 关于import的问题 关于asa的问题 一个小问题,请求帮助!!!!!!!! 求救!请教关于__cdecl的问题 近日开发一足球博彩性质网站,请各位推荐几个漂亮的前台页面参考参考,非常感谢! 有关WebService的问题,请高手指教!!!Up有分 我装上apache_2.0.43后,输入http://localhost:端口/不能运行(有人说是端口冲突,我改成别的端口还是不行),还有什么地方容易出错,请高手明 关于File的一个问题:如何基于已经存在的文件生成File对象? 郁闷呀!这两段程序有什么不一样的?送分 win98上两台机同时“装Internet连接工享”,却出现不允许,自动关掉了共享. 在无脊椎动物中,昆虫的活动和分布范围最大,主要原因是 ( ).在无脊椎动物中,昆虫的活动和分布范围最大,主要原因是 ( ).A.口器发达 B.体表有外骨胳 C.一般有两对翅 D.适于陆地生活 什么是木春病 昨天买了个60块的激光笔 功率较高的那种 2节新的7号电池装上玩了1分钟就不亮了 在换两昨天买了个60块的激光笔 功率较高的那种 2节新的7号电池装上玩了1分钟就不亮了 在换两节新的在玩一 昆虫分布最广的主要原因主要原因!简短一点 冲浪英语八年级新课标阅读理解答案冲浪英语 八年级新课标阅读理解的答案. 速度. 沉甸甸的读音是什么到底是一声还是四声 Confidential place 激光笔的电池去不出来怎么办 沉甸甸的读音“甸”字的读音只有“dian(四声)”,但为什么“沉甸甸”的“甸”字读“dian(一声)”. A Place Near By歌的中文意思是什么 激光笔的电池是不是充电的 沉甸甸中的读音是什么?旋转的读音是什么? daria place的中文意思 为什么极光出现在地球两极? 沉甸甸的甸的读音 比喻离黑暗环境,重新见到光明.词语 在一个小球的左右两边各系上一条绳子然后用力拉起使小球悬浮在空中这时小球受到左右两个力是平衡力吗如果是那么剩下一个对小球的重力小球为什么会静止呢为什么现实中能把左右两边 要做个东西,要三根分别为长1.1 2.9 2.1m的三根材料才能组合好,要做这个东西100个,提供总长为7.5m的材料要做个东西,要三根分别为长1.1 2.9 2.1m的三根材料才能组合好,要做这个东西100个,提供 干螃蟹怎么做? 在一个小球的左右两边各系上一条绳子然后用力拉起小球悬浮在空中这时小球受到多少个力?且为什么小球会静止在空中呢?左右两边的拉力以小球的重力垂直这样左右两边的拉力不就是平衡 在相同时刻的物高与影长成比例,一杆高为1.5m,影长为1m,同时,某塔影长为20m.求塔的高.如题所示.高手帮忙. 为什么无脊椎动物中昆虫的活动范围最广泛?到底是因为具有翅膀还是因为有外骨骼? 七年级上册语文 生词 解释如果你能全部答出,就全部答出.不能的话就答第6课的,词语是:饥寒 离乱 缀连 远行 倔强 洗濯 玷污 怨恨 扒窃 诅咒 浓阴 海天相吻 浪子回头 碌碌 place意思 求英语语法解释!place的表达意思?Estmates place the value of tablet computer market about at seventy-nine billion dollars this years.句中“place”表示什么意思? 七年级上册语文(人教版)第29课生词的解释丶嬉戏丶哞哞丶潺潺丶眨巴丶红润丶孪生丶痒酥酥丶娘娘跄跄丶这几个词的意思丶顺便说下主要内容丶额丶是解释词语的意思啊丶不是造句啊丶T_ 但是他们决定试一试.英文翻译 激光是什么波?, 英语翻译 但是他们仍然决定试一试. 激光波宽加大后没有激光? 要字典上的 法语a la place de是代替的意思,那a sa place有木有代替的意思的啊?A sa place貌似有个就各位的意思的吧? 仪器监听核试验用的什么波(次声波还是超声波) 爱情的反义词 A TWOSOME PLACE DESSERT CAFE怎么样 形容脱离黑暗 重见光明的词语? 恋爱的反义词 what a place! 重新见到太阳.比如摆脱黑暗,重见光明的成语是什么? 热恋的反义词是什么? 昆虫记有趣故事 有知识的故事 place a collection是什么意思呀?句中的place是什么意思? 关于昆虫学家关于昆虫学家法布尔 昆虫记 讲述的几世纪的故事 转动激光源的位置,让激光束从法线另一侧射向平面镜,观察反射光线的位置.由此可得到初步结论 蜗牛能代表动物吗 俄国的英语的叫什么? 什么木逢什么带春的是成语 恋的反义词是什么 我们还是交个朋友吧,我非常喜欢交朋友 ,你说那?用英语和俄罗斯语分别怎么说我们还是交个朋友吧,我非常喜欢交朋友 ,你说那?用英语和俄罗斯语分别怎么说 世 定 鬼 春 棺 木 大 之 百 逢 小 流 论 虫 盖 百 足 枯 芳 人什么成语 鱼会发出声音吗? 黑俄罗斯用英语怎么说 木无本必枯,下一句是什么 英语翻译(30)This report is a preliminary assessment of the mining potential of the Mokau Coalfield which has been carried out along with an assessment of the environment factors which might affect mine development and operation.The report include place什么意思? 重新看到天空和太阳,比喻脱离黑暗环境,重新见到光明.写出相应的词语.Thank you very much.TF8999Jack 生长时期的人的身高和年龄成不成正比例 与.一样大、重、高 用英语翻译,两种 中纪委监察部带头落实八项规定 会议费范冰冰裸体甘露生活照曝光 竟是《女特斯诺登请求美对其法外施仁 白宫拒绝并阿盟呼吁叙利亚反对派参与日内瓦国际和印度一名女婴患家传怪病 身体多毛酷似埃及前总统穆尔西审判前夕 两名当地警太平洋岛国被指有日本沉船宝藏 价值8克罗地亚中央墓园--欧洲最美的墓园【印度女婴家传怪病 身体多毛酷似狼孩(俄罗斯军事动作令邻国不安 北约军演以印度将发射环火星探测器 否认与华“太英国15岁少年欲滑雪闯南极 探险为筹最贵钻石亮相纽约 估价超六千万美元(泰游船沉没一中国游客遇难中国金融改革步入深水区 推进内外开放克里中东之行访埃及 停留数小时修复两男子患病“变形”却不“金刚” 被迫宅永嘉一家六口当老鸨栽了非洲多国出现罕见混合型日食克里访开罗寻求修复美埃关系长兴3万株古银杏披“金”衣与青山翠竹现在,从我胯下过去吧!美女,真的做什么都可以吗?终于有一天他变成了斗鸡眼,好冷!内涵的三十年积蓄,你懂吗?小城故事多,充满喜和乐!一边嘘嘘一边吃东西,我不这样的叫你嘲笑我便秘!慎点!这是一个洗脑漫画,我已经被洗!我女朋友怀孕了,可我一直有保护措施啊漫画也有大片范儿 angelaba两块钱你买不到你吃亏,买不到上当今天晚上我们就在一起吧!内涵图,你看懂了吗?好恶心的品味,让我吐一会儿我找到了,在你的下!体!油价暴涨4%供应中 联手EIA痛打A屎上最悲催的老师,没有之一!画面太邪恶,我不敢看!一男子在小巷内遭遇一女鬼侵犯自恋!竟然冒充我女神!看我战胜你!原来这才是菩萨叫唐僧取经的目的!万万
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘