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

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

编辑:说三道四文库 发布时间:2017-03-24 02:28
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
谢了,加分
收藏
收藏 
10个最热JavaScript开源框架的社区活跃度对比 2013福布斯中国富豪榜:李彦宏第三、马化腾第五、马云第八 Storm又获东风,Hortonworks计划将其整合到Hadoop企业版 IBM CEO:预测高新技术 五个我最喜欢的方式 我伙呆,硅谷高级工程师年薪16.5万美金起 羡煞旁人的Supercell:Clash of Clans卫冕营收榜冠军 谷歌第三财季利润增36.5% 但摩托罗拉业务继续亏损2.48亿 针对应用开发者的几点建议:注意特征蔓延、加大用户评审…… Ubuntu中文衍生版UbuntuKylin 13.10正式发布 Web设计师和Web开发者之间的区别是什么? 在政府退出后,Google的量子计算机项目面临危机 SQL on Hadoop的最新进展及7项相关技术分享 联想:欲收购黑莓,还能在智能手机领域创造PC神话吗? 谁说Android开发者的收入依然不行? 代码可维护性的神秘面纱 MDCC 2013首批演讲嘉宾名单出炉 议题即将披露 MDCC2013:公开征集讲师和演讲主题 移动周报:IT人必看!9大最火移动开发技能 OpenStack H版发布 盘点2013:21个最火的云初创公司 从摩尔定律到原子计算,2013诺贝尔物理学奖背后的计算机技术 黄峻:从自制纸板键盘的孩子到Adobe技术经理的故事 Web开发正被颠覆 开发者需认清五大新现实 最发人深省的亚马逊面试题,你会如何作答? 所见即所得:8款实用HTML5开发框架 Groovy最受欢迎 Java系开发者更偏爱其他JVM类语言?(图) [开源专访]iNews创始人赵戈戈:36小时开发的PHP版HackerNews 使用Spring框架的12个开源项目 甲骨文仍旧“憎恨”开源软件 开发者应该避免使用的6个Java功能 不可小觑的Web开发编码规范 我公司现有固定电话收发电子邮件系统,可收附件,将WORD,HTML文档转换为TXT文本 关于内码问题 远程控制 关于JDBC2.0的问题(50分!!!!) 哪位有高招? 升级BIOS和升级主板? 急!急!急!急!窗口不能关闭. 哥哥姐姐们请帮忙???(急需linux环境下用php+mysql如何实现搜索引擎) 大家赞不赞成开一个Palm技术区?赞成的跟贴,满50个就开。 定义 Dim reader As System.Data.SqlClient.SqlDataReader lvlvlvlylyly请看,你的贴子我加不上了,还查一段程序加在这里了 如何传送monthview1中用户选择的日期到其他窗体里 你该怎么做呢 国内什么样的网站托管好?还是选择国外的? 女网友一定要小心 mschart控件问题 赶快来尝试一下吧! 如何在 View 类中编写press any key to continue功能模块 Vc++下应用Matlab数学函数库出错 如何用VB实现自动登录? 赶快来尝试一下吧! ado的问题! 如何传递带“%”的参数? 有全套的ERP源代码为你提供,助你在开发过程中更上一层楼 字符串str=" aaa ",如何变为"aaa" 怎么没有人理俺泥?? 关于dw的问题 如何读入数据库中的HTML格式的正文呢? 一个在阅读<<深入浅出MFC>>中遇到的问题 !!!!急 新手,说找不到mfc42d.dll文件 怎么没有人理俺泥?? 关于dw的问题 FAST.lib 2000 for windows是个什么东东 请问各位一个非常简单的问题 jdk和jvm 笨蛋 大家有什么建议吗? ASP.net如何刷新另一个页面 有一年delphi工作经验的程序员在全国各地的待遇如何?哪个城市有发展前途(钱途)? 100分求解!!!这个问题大家都来看,来者有分!!! 告诉我几个地方,给你几十分,简单吧 :-) 有没有关于VPN的书籍 Interbase源码分析 西瓜是Plmm哎~! 一个字符串替换的小问题。。。 还有一个问题需要问大家。。。特别急。。。 我变成了大家的一员 哪儿有在jbuilder中让三键鼠标可以使用滚动功能的驱程? 我想把ODBC的所有数据源列出来显示,不知道用哪个函数,谁能告诉,多谢了!来就有分 两台机器怎样用一个asdl宽带猫上网 我的vc编译器在我的一个程序就是不出自动变量填补功能,在其他程序上可以,不知为什么 我想把ODBC的所有数据源列出来显示,不知道用哪个函数,谁能告诉,多谢了!来就有分 怎么复制程序自己? 二氧化碳与氢氧化钙溶液反应生成碳酸钙和水,不用配平. 怎么用实验证明碳酸钠水解反应是吸热反应要试验原理,用品,现象,结论和解释, 小明想通过如图所示实验验证液化过程是吸热还是放热,试管A未放入容器B中时,用温度计测出B中的水温,再将试管A放入B内将烧瓶内水沸腾所产生的水蒸气通入试管A中,过一段时间,小明看到的 CO2通入氢氧化钙溶液中,是水和氢氧化钙同时与二氧化碳反应吗? 伴性遗传 判断最可能的遗传方式一个正常男子和一个患病女子结婚,生了一个患病女孩和一个患病男孩,女孩长大后和正常男孩结婚,所生的子女都患病,那么该遗传病最可能属于什么遗传是伴X 水处理材料都有些什么?什么产品是水处理材料? 物质量均为nmolNa,Na2O,Na2O2,同时加入nL水中完全反应后测溶液密度为ag/cm3则所测得溶液的物质的量浓度为? 醋酸氟轻松冰片乳膏的副作用 如何证明Na2CO3的水解反应是吸热反应 1,在基因型前面加的分数是什么意思?(例如1/3 AaBb )2,分枝法怎么推测子代性状分离比?子一代自交.3,推测基因型和表现型有没有什么诀窍,请举例.加扣扣, 醋酸氟轻松冰片软膏可以使宝宝皮肤白吗 如何证明碳酸钠(Na2CO3)的水解是吸热反应 . 下列物质中不能与二氧化碳反应的是 A氧气 B水 C木炭 D氢氧化钙 那么C呢~ 为什么氯化钙的熔点比氯化镁高按影响晶格能的因素,镁离子半径比钙离子小,电荷相同,氯化镁的熔点应该比氯化钙高,查阅数据可知,氯化钙的熔点比氯化镁高,这是为什么? 如何 产生静电 质遗传的杂交实验,F1的表现型总是和母本一样这句话错在哪 温室下,在氢氧化钙的饱和溶液中加入下列物质,冷却至温室,溶液的PH没有改变的是A,CO2 B ,CaO C ,NaOH D,HCl 怎么样会产生静电?为什么? 怎样学习我很难理解概念,总觉得很模糊.每个知识点很难联系在一起.我对遗传学比较有兴趣,但是感觉很难.我花了很多时间去了解、记忆, 氢氧化钙溶液中通入或加入下列物质,不能使溶液的PH显著降低的是A、硫酸 B、氯化铜 C、氯化钡 D、二氧化碳 静电如何产生? 生物遗传现象简介 在氢氧化钙饱和溶液中加入什么不影响PH值A、通入二氧化碳B、加入大量水C、加入盐酸D、加入石灰石 如何产生静电.想让橡胶棒与毛皮摩擦产生静电,这两种材料怎么找,如果不好找有没有替代品呀?或者请教一下其他产生静电的方法,. Aa与Aa自交生出AA:Aa:aa=1:2:1为什么有时算Aa的概率=2/3为什么有时候概率是1/2什么时候分母4为什么时候分母为3哈 向氢氧化钙的饱和溶液中加入下列物质,不可能使溶液的ph有明显变化的是 A通入CO2 B加入稀H2SO4 C加入氧化钙 D加入Na2CO3溶液 是不是是OH-的浓度决定酸碱度,而不是OH-的数量 谁知道静电是如何产生的吗? 血液和尿液中同时含有蛋白质是什么原因 氢氧化钙溶液中加入下列哪种物质不能使ph值显著降低?单选 A.硫酸B.氯化铜C.氯化钡D.二氧化碳请说明理由 补分的 白化病的遗传方式是什么? 为什么第一题第一个空不是AA呢\?第二题为什么没有AABb?还有,计算怎么算?AA aa AaBb AaBB 20/27 怎样把重铬酸钾中的六价铬还原成三价铬 关于遗传病的遗传方式那些遗传病是伴性显性遗传?那些遗传病是伴性隐性遗传?那些遗传病是常染色体显性遗传?那些遗传病是常染色体隐性遗传? 关于基因遗传某女性患红绿色盲,她的下列亲人中肯定携带色盲基因的是A 祖父 B 外祖父 C 外祖母 D 祖母求详解 六价铬怎么还原成三价铬,用什么还原剂更好?亚硫酸钠可以不? 天然冰片是如何形成的 如果父母双方都有某病,那么无论孩子男女都会患比病,如果父母双方有一个人有此病,那么生出的女孩百分百患病,男孩百分之五十患病,我想问一下这种病是什么遗传病?好久没做过生物遗传题 如何治疗尿蛋白呢 尿里有微量蛋白该怎么治呢 天然冰片是什么? 1.假定某三体植株自交时,n+1的胚囊全部参与受精,而参与受精的花粉中,n+1的花粉只有10%。那么,该三体植株自交子代群体中,四体、三体和正常二倍体个体数分别是?5%、50%、45%)请问为 男性有微量尿蛋白怎么治? 蒸发器的工作原理?请附带图解,现在我对这方面问题一窍不通 【急求解】一道高中生物题,遗传方面的一株纯黄玉米(YY)与一株纯白玉米(yy)相互传粉,两株植株结出的种子的胚和胚乳的基因情况是:A、胚细胞相同、胚乳细胞不同B、胚细胞和胚乳细胞都 尿微量5mg/l,尿蛋白+2正常吗?病情描述:曾经治疗情况和效果:看了好几家医院,尿蛋白有的微量,有的+1患者信息:女 24岁 重庆 沙坪坝区 病情描述(发病时间、主要症状等):曾经治疗情况和效 冰片 有哪些种类?天然冰片和合成冰片有何区别?价格如何? 打针时进了空气会不会死?不进血管也会死吗?多久会死? 尿微量尿蛋白偏高怎么办患者信息:男 46岁 病情描述(发病时间、主要症状等):尿微量尿蛋白是108.0(H),尿酸371想得到怎样的帮助:尿微量尿蛋白偏高,生活里怎样注意饮食?喝什么药好呢?现 降膜蒸发器的工作原理? 人的身体进多少空气会死 请问尿蛋白微量怎么办?首先感谢来看问题的医生,我是一名前列线病人,吃药快二个月了,先是尿道炎好了,现在检查时出现尿蛋白微量了,医生说这个不正常,我以前每个周六都查一次,尿蛋白都 【D为什么不对】 为什么将空气注入静脉会导致人体死亡呢? 将等物质的量的Na,Na2O,Na2O2,NaOH,分别投入等质量的足量水中,将质量比等于式量比的Na、na2o,Na2O2、NaOH分别投入等质量的足量水中,所得溶液质量分数最小的是求详细解答过程! 高中生物遗传题(选择)(非计算,不难)材料央视报道孕妇防辐射服……(废话),A碱基对的替换增添和缺失都是有辐射引起的.B环境所引发的变异可能为可遗传变异C辐射能导致人体遗传物 什么叫往身体注射空气? 我想知道,红绿色盲、血友病、白血病它们分别是什么遗传方式?是常染色体遗传还是伴X遗传还是什么? 小明想通过如图所示实验验证液化过程是吸热还是放热,试管A未放入容器B中时,用温度计测出B中的水温,再将试管A放入B内将烧瓶内水沸腾所产生的水蒸气通入试管A中,过一段时间,小明看到的 为什么打针时要是针管里有空气,住入人体里人就会死呢? 一道高中生物遗传方式判断的题答案是(1).黄色,常(2).正常,长常怎么看的呀, 实验证明液化放热
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘