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

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

编辑:说三道四文库 发布时间:2017-01-25 01:29
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
谢了,加分
收藏
收藏 
互联网产品设计的12个理念 Pair、Between、小恩爱:妹纸装个情侣应用吧? 横跨四大操作系统:3DMark将挑战所有智能设备 美国碰壁欧洲得意 华为获CERN青睐 应用数据分析新标准:Flurry增应用崩溃分析功能 Twitter被黑客入侵,25万用户信息可能被窃 16亿美元超级计算机项目助力解读人脑 卡巴斯基发现新型Android恶意软件 可入侵Windows 谷歌发布基于B-Tree的C++模板库 开源产品系列:高性能Web框架Zend Framework LiFi是否会取代WiFi? 1月浏览器排行:IE10突破1% Chrome连续3月下滑 Wine让Android也能运行Windows软件 Cory Ondrejka,是这位工程师拯救了Facebook! 三星争夺企业市场的三大痛点与对策 Xcode更新至4.6 支持iOS 6.1 工程师揭秘:NVIDIA如何锻造Android掌机 VMware掌控Puppet 老用户会被锁定吗? 试图领导创新:三星创新中心11亿美元建基金 基于WebRTC Chrome与Firefox实现视频通话 将OpenStack私有云部署到Hadoop MapReduce环境 Web设计师必备的10款最佳排版工具 诺基亚CEO谈平板计划 Android为候选系统 244亿美元!戴尔公司正式完成私有化 对抗苹果 Facebook或推Find My Friends应用 前谷歌工程团队负责人:如何打造一个完美的产品 好消息!Google Drive可存储共享JavaScript等网站 Android Rivers:用Kotlin语言写出的新闻应用 辞旧迎新 老牌游戏开发商的移动进化之路 iSuppli:硬盘市场持续萎缩 大数据应用成重要市场 全球最大校园Hackathon:失败后,你能学到什么? 请教升级注册码的问题。欢迎讨论 请问,一台机器能装两套win2000吗? 关于VXD的问题 谁来讲讲turbine?? 【 关于数据库的问题,请帮忙。 】 单击CListCtrl中的CheckBox触发什么事件?该用哪个函数处理? 关于VXD的问题1 急!!!一个怪问题! 怎样获取指定框架(frame)的大小? 各位大虾,小弟有一个关于windows2000的问题 招聘信息 Happy Time!关于邮件安全谁有好的建议?找一个不运行脚本和控件的客户端还是自己写一个? 做一个合格的程序员需具备那些知识? EXCEL.APPLICATION的关闭事件 再次retrieve时报错“ARITHMETIC OVERFLOW OCCURRED” 急:如何在ASP中使用Microsoft Index Server? 简单但是比较不常用的问题,来拿分吧! 谁能告诉我有关一些开发e-mail软件的资料 我想要源代码 用ADO DATA控件和ACCESS数据库连接好后,怎样断开。 软体蛀虫再战江湖,续原来的帖子“愿意给中国共享软件作者提供一些帮助,共同推动中国软件业!”。请大家赏光 请问:各位在数据库的时候,对于性别,使用0/1 还是男/女 程序运行后,改变屏幕的分辨率后,比如改小,则程序窗体有部分到屏幕外边了,如何在改变分辨率的时候,让程序的窗体大小也跟着改变? 各位高手帮帮忙!!!!!!! ------急--------急---------急--------- 在c/s结构中,到底用不用数据敏感控件? 用ALT+F4关闭窗口会不会引发form_queryunload和form_unload事件? 请对表格熟悉的资深高手请进! 在linux下怎样使用libpcap截获IP数据包并统计每个IP地址的数据流量以便计费???请给出一点思路。多谢! 怎样在用户控件中引用第三方的控件? 请教:为什么我的activex dll下载后不能使用 求救: access數據庫用戶組中Admin的密碼丟失,怎么辦? 请问各位 那里有 delphi的电子书籍下载??/ Oracle:怎样在Client和Server之间建立联系? JAVA中的2维数组赋值问题。 怎样将整形变量的值转换为字符串的值 为何汉字会变成乱码?? VC动态链接库调用的问题 怎样打开DLL中的Form? 庆祝这个开心的星期六!送分 如何在程序中将一个变量放入指定的节(session)中,而不论这个变量是否是初始化的? 登陆SQL PLUS 问题???请帮忙,谢谢!! 初学DirectX的几个问题 定时执行某段代码~ 有关ADO中智能指针的初始化问题?很菜的! 还是局域网共享文件夹密码问题,我看了袁哥的主页,按照他的方法怎么不行呢, where can we find free webspace to store my programs? 请各位大师救救我吧:如何在CRichTextCtrl或其他的什么控件中打开一个DOC文件,十万火急,答对50分一定奉上,谢谢! 这是什么错误:Exception in thread "main" java.lang.NoClassDefFoundError: TestBed/class 给我的网页提意见,来者有分!!!保证!!!http://kkoffice.yeah.net 在调用一些函数是,老是出错,说不能把我的AnsiString转换成char,我改怎么办呢? 我该如何推广销售“口语听力练习软件” 容积单位有什么 某烧杯装满水的总质量是350G.放入一块合金后,溢出一些水 这时质量为500G 取出合金后杯和水总质量为300G 求合金的密度 固体和液体的压强公式不一样 关于液体容量的单位换算?》比如水的容量该怎么算.HL?KL?也就是1毫升等于多少吨?一千升等到于多少吨.毫升?千升?分别用什么字母表示?请说得详细明了易懂一些!还有水的体积和重量单位的换 合金的密度是多少 计算固体压力和压强和计算液体的压力和压强有什么相同点和不同点 升和毫升是计量液体的单位名称吗? 求合金密度.一块铜金合金,质量200g,体积20cm3,金密度19.3g/cm3,铜8.98g/cm3,分别求金铜体积别列方程,用浓度三角解. 液体压强和固体压强的共公式不是一样的么,有什么区别呀压强公式均可由基础公式:P=F/S推导P液=F/S=G/S=mg/S=ρ液Vg/S=ρ液Shg/S=ρ液hg=ρ液gh 面积体积的公式图形的体积面积周长的计算,要用字母啊……同志们…… 1 一个空杯子装满水水的总质量为500克 用它装满酒精能装多少克(酒精密度0.8×十的三次方千克每立方米)2 一个空杯子装满水总质量为1千克用它装另一种液体可以装1.2千克求这种液体的密 规则液体压强计算公式用固体压强公式为何答案不同看过一些解析说固体压强公式不适用于液体压强计算的原因是液体有可能装在不规则的容器中.但是当液体是装在一个柱状容器内时,应该 计算面积,体积公式所有可以计算的,地、型、立体等、 物理题初二密度与质量急用!1计算题某城市要雕塑一个历史人物大理石的全身像,所选择的模型质量为75kg,要塑的石像是模型高度的4倍,大理石的密度为2.7乘以10的三次方kg每立方米,试估算该大 为什么压强公式p=ρgh只适用于液体与气体 我要面积,长度,时间,重量的公式 初二(关于质量、密度和体积)某个空心铜球,它的体积为60cm³,质量为445g.若将其中空心部分铸满铅,那么此球的质量是多大? 水对容器底部的压强公式是容器底部受到的压强公式,不是内部. 所有物体的体积、面积、周长的文字公式 有关质量与密度的国家标准规定以A0、A1、A2、B1、B2等标记来表示纸张幅面规格,以“克重”来表示纸张每平方米的质量.刘刚家新买回一包打印纸,包上标注着“A4 70 g 500 sheet 210×297mm”,意思 装水的容器在正放和倒放时对水平桌面的压力和压强 扇形的面积和体积与周长的文字公式是什么? 1.容积为200毫升的杯中装有80克水,再在杯中放入每颗质量为15克的小石子24粒,水面正好升至杯口,那么小石子的密度多大?2.有一铁球质量是234克,体积是80平方厘米,问铁球是空心还是实心?如是空 算压强时,P=pgh,P=F/S的区别 .算水对容器压强 ,容器对桌面压强分别用哪个公式,还有容器不是柱状的时候,公式怎么用? 梯形体积计算公式? 1.一个瓶子装满水,总质量700G,若向瓶中投入445G的某种金属碎片,溢出一些水,测得金属碎片,水,瓶子总质量是1095G,求金属碎片地密度.2.没有量筒,只有一个空瓶,一台天平和水,你能不能设法求食用 在盛水的容器中放一固体沉底,则容器对桌面的压强该怎样算?我老师说要加桌面对容器的支持力,因为作用力和反作用力 单位体积液体的重量称为液体的什么? 菱形体积公式拜托各位大神 是指密度吗? 单位体积内液体的重量称为液体的什么? 我要所有的体积和容积的公式? 密度与重度的关系式是什么? )叫做容积,计量容积一般用( ),计量液体的体积常用容积单位( )和( ).希望学习成绩还不错的来解答! 质量密度体积公式谢谢了,大神帮忙啊 某图样密度为1.85g/m3,含水率34%,土粒比重为2.7%,求求土样饱和密度,饱和重度:要有公式,最好能带讲解,) 计算容积,一般用( )单位,但实际量液体的体积,如汽油、水等,常用( )单位( )和( ) 园环的体积公式是什么?谢谢了,大神帮忙啊 千克单位换算?4810千克=多少斤?聚胺脂原液1斤多少双男鞋底? “计算液体的体积,常用容积单位.”这句话是否正确? 重力的大小也叫(),物体所受的重力与质量成(),用公式()来表示 小明同学学习了密度知识人口后,对干密度公式 常用得体级单位有(),(),(),计量液体的体积常用()和()作单位帮帮忙 有计算椭球型物体的体积和表面积公式吗? 计算密度的公式是什么? 计量液体的体积常用什么做单位 椭圆形的体积公式 请问纸的密度怎么算?计算公式是?暂时没分不好意思了, 容积单位有几个,分别是什么 合金密度怎么求两种金属的密度分别为p1、p2,取质量相同的这两种金属做成合金,求这种合金的密度.(p1+p2)/2对不对啊 谁帮我解释下这个密度公式1.用天平测出固体质量m,用天平测出溢水杯装满水后的总质量m2,取下溢水杯将待测物体(一个固体)放入装满水的溢水杯中,水溢出后用天平测出溢水杯及杯中物体 体积单位和容积单位的区别请教一道判断题“计算容积一般用体积单位”应该判对还是错?问什么?发表一些意见! 合金密度问题有一种合金密度是1.2*10^3km/m^3,它是由下列物质中某两种物质组成的,根据下列组成合金物质的数据,判断组成此合金的两种金属可能是?1.金:19.3*10^3【密度】2.铅:11.3^10^3 【密度 速度是怎样定义的?密度是怎样定义的?定义式分别是什么? 容积的单位有哪些 合金密度怎么算?甲、乙两金属的密度分别为(就当是那个希腊字母了)P甲、P乙,将等质量的甲、乙两金属制成合金,则合金密度为→答案是2P甲×P乙÷(P甲+P乙),为什么呢? 除了p=m/v以外的密度表达式 容积单位是什么 题目是这样的,铅铁合金中铅的体积占五分之一,其余是铁,求合金的密度是多少?(p铅=11.3克/立方厘米,p铁=7.9克/立方厘米) 液体的压强计算为什么和固体不同?1、能具体解释一下“流动性”是怎么一回事吗?2、既然p=Pgh为什么将一个装满水的矿泉水瓶正方与倒放对地面压强不相等?不是与底面积无关吗?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn