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

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

编辑:说三道四文库 发布时间:2017-06-26 06:41
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
谢了,加分
收藏
收藏 
智能硬件峰会(下):苹果、微信、小米带给移动医疗产品开发的启示 移动游戏峰会(下):从端游转型手游、如何做一款不一样的游戏 移动游戏峰会(上):小团队如何做出大制作、游戏防作弊攻防战 深圳微信开发者大会:拒绝概念 这次只谈“怎么做” AMD应邀出席HPC China 2014,重磅推出新一代Firepro-S系列高性能显卡 你就是主角,MDCC 2014交流对接活动回顾(组图) 解读最具O2O属性—哈根达斯微信企业号的成功之道 值得Java开发者参与贡献的十个开源项目 LokiJS:纯JavaScript实现的轻量级数据库 OpenStack第七次北京Meet Up:谈私有云现状 中国电信携手电商打造跨界O2O联盟 【MDCC 2014】移动开发技术与平台峰会(下):系统演进、应用数据泄露风险 惊喜太多 IntelliJ IDEA 14正式发布 欧派、南航、招行、哈根达斯等加盟 深圳微信大会第二批讲师议题公布 【MDCC】用友高级副总裁谢志华:企业移动化的变革与挑战 HTML5定稿了,为什么原生App世界将被颠覆 走苹果的路子!Jawbone推低端健身追踪设备 专访POWER 8编程挑战赛选手吴亮:集众家之长, 激发算法性能极限 微信沟通接口上线,开启移动应用与公众号的连接 【特惠最后1天】参加深圳微信开发者大会赠书及全套讲师讲义(附大会最新日程) 编码运行两不误!KZPlayground,Objective-C中的Playgrounds 专访PopCap:AR是数字与物质世界的调和剂 【多图】Github编程语言分布统计:JavaScript称霸 【最具价值CTO评选秀】途家美女CTO杨孟彤:不创业会后悔 2014腾讯WE大会:开启未来的五大科技发展趋势 TIOBE 2014年11月编程语言排行榜:R受大数据影响跃至12位 深圳微信开发者大会全部议程出炉 最后仅剩30个参会名额 智能硬件:一半海水,一半火焰 聚焦SDN、NFV、云安全基础架构等技术热点 2014云安全联盟高峰论坛即将召开 富Web应用开发的七大原则 应用原型设计毫无压力!开源Sketch插件管理器Sketch Toolbox 一条sql语句! 我能在w2k下为非PnP串口设备写驱动吗? 哪位可以解释一下,构造函数到底有什么作用??? 难道没有高手帮我解决这个问题吗?mysql 版主请进 菜单如何显示在工具栏之上? 有关线程之间交换信息的问题 为什么在WIDNOWS98下用MASM50编译的汇编程序不能运行? sql如何自动定时清空日志?(在线等待!) 游戏 有没有办法用纯Javascript取得<form>里面用post方法post过来的数据?100分在线等候!!!绝对给分!!!!! 大家好,级联菜单怎么做呀?再线等待!!!急 邮件发送不了??? 一个落后的问题,用DAO能链接sql server数据库吗?如果可以,怎么链接!? PB中用代码建立ODBC数据源问题。 response中的问题 大家好。 我是新人。。。。。。。 关于用vc操作word中表格的问题 我的机子运行了几个用bde连接数据库的程序,在delphi里就打开不了src了出现以下错误! 求大家一个问题.我已经快疯了?我在等待ing 请问如何用delphi编写一个录音的com组件,在ASP中调用,详细些! 不知道自己到底喜不喜欢女朋友,纳闷.......... 急问!!! 很简单的问题,但是很急,解决了就给分!! 根据一些来历不明的消息说,微软将在2008年停止对 VB.NET 进行技术支持。是真的吗??? 怎样实现倒退和快进,用mediaplay组件播放影片,想在影片结束时自动调用某个过程,这个影片结束的事件是什么? 怪:DataGrid中选择一行后此行不能编辑! 有谁用过工商银行的国际借记卡了吗? 如何将反馈表中的若干表单内容发送到指定的邮箱并同时抄送到另一信箱? 使用游标时出现 -1002 的错误如何解决? 数据的初始化问题。 [求助] 如何用DirectX显示YUV格式的图像 我在安装Red Hat8时说一个文件坏了,但我有源代码,怎样编译成成哪个文件。 桌面内容不见了! 怎么获得当前目录 快救命啊高手们、菜鸟兄弟们,偶遇到sql语句问题啦,怎么对数据库插入数据啊100分给你 一个很白痴的问题,不过我实在搞不定,关于dbGrid的 一个关于数组基本使用方法的问题 请问如何把数据写到用OleContainer控件建立的WordApplication文档里面和如何从里面读取数据? 重回pb论坛,庆祝一下! [初级]请问如何在WebServer连接DBServer的Access资料库? WIN2000的MSDOS下无法输汉字 win2000p的老问题了,关于虚拟内存,页面文件 如何删除sql的日志文件!! 快救命啊高手们、菜鸟兄弟们,偶遇到sql语句问题啦,怎么对数据库插入数据啊100分给你 datagrid的问题,请大家进去看看,帮帮忙!在线等待 各位高手 用什么方法可以拖慢我的机器 在delphi中如何动态建立oracle的存储过程和触发器? 刷新父窗体的问题 请问:float数据的转换(见文章) 高手,救命啊!!在線等! Friendship helps us understand [ ]kind of person we are ,why we need each other and [ ]we can dofor each other .A,what ,what B,what ,that C,what how 【说明原因】 There is a s_____ over there.We can buy some thing from it. This is my room .Near the window there is a d------- .I often do my h----- at it .You can s----- some books,a ruler a------ a pen .O------ the wall near the desk there is p----- of a cat.There is c----- above the end of my bed .l usually p----- my fo As Time goes 还有一个问题,英文歌名是不是每个词的开头字母都要大写? 1.The math problem is too diffcult.Could you help me________(work) it out?2.Would you like_____(go)to the concert with us tonight?3.I'm sorry.I'M_____(go)to the movies4.Sunday is the_____(one)day of the week5.He takes a shower _______(one) a week give sb an accout of 的意思是. as time goes by 中英对照歌词 as time goes by 和as time passes by哪个对? lend sb an edge in who often rides a bike to school?里面为什么用的是rides 而不是ride Mr Green won't go home until he finishes the work.为什么要用finishes?是不是有什么语法点啊? Have you ever traveled on a plane?(哪个词能替换句中的ever,为什么?)A already B just C yet D before 英语句子 If you don't help me ,I couldn't work out the math problem改为同义句 幼儿英语早教如何?重庆什么价? --Have you ever traveled on___train?--Yes.A.theB./C.aD.some Bajin,one of the greatest writers in China,_as "people's writer."A、is regarded B、has regarded C、is regarding D、regards 该怎么选?这道题考的是哪个知识点? 英语句子改错:That is too hard for me to work out the math problem.____只有一处错误的. He ___ back until the work _____ done.A.isn't;will be B.isn't;is C.won't be;will be D.won't be; people bagan to take note of her talents as a writer..能否换成 talents of the writer How( )the boy (fall)off his bike just now?用括号内所给词的适当形式填空How ———the boy—— (fall)off his bike just now?横线上填空 I will not go with you until the work( )finish用finish完形填空 I now happen later contact He can work out the math problem easily改为同义句 make ourselves ------(understand) other people .填原形吗 小事乐团 类似face the change 这么热血的歌或者类似 time goes by风格的歌还有哪些?RT 改为同义句:he can work out the math problem easily hurt myself yesterday改一般疑问句你们谁先发都? the shadow of a pencil in the sun , its ______ , ______ , ______ will change as the time goes by in one dayquickly !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!快!!!!!!!!! i can't work out the hard math-------选question还是problem,说明为什么 an arch enemy 头号敌人 arch是拱形,弓形的意思,和头号有什么关系呢? something/smoebody/nothing等不定代词后面是加to do还是加doing?如:There is always something interesting --------(happen) there.填什么? 为什么有春夏秋冬啊?为什么会有春夏秋冬四季? An enemy officer was caught____.A.liveB.aliveC.lived D.to live who is the fucking asshole in China? l will work on the problem ,l don" care how long it will take .为什么这里是 will take 有首英文歌歌词里有as a friend as an old enemy Yang Liping is one of the best ( )in China.(people who dance) we work hard to()our ability fear is an enemy是什麽意思 世界上中国人口最多.______ ______ ______people in China is the largest in the world.______ ______ ______ ______people in China in the world. SAT 作文题:Do people need to compare themselves with others in order to appreciate what have请给出几个合适的例子和文章的分析思路. 敌人必须死 AN ENEMY TO DIE FOR怎么样 If each latter stants for a different number.Can you work out the math problem P O T A T O+ T O M A T O---------------S A L A D S apart from people badly in need of training in order to return to the job market jane will finish the work in two hours,in two hours 划线, 1.the boy can work out the math problem___different ways.在横线上填上适当的介词1.the boy can work out the math problem___different ways.2.Wang Fang is better ___English than I am. 请问 There is no ____ from my bedroom window excpet for some factor chimneys. 1.It took me two hours to finish the work(改为同义词句) I( ) two hours( )the work 2.He hardly ever1.It took me two hours to finish the work(改为同义词句) I( ) two hours( )the work2.He hardly ever has time for concerts(改为反义 求 wear ,put on 的用法与区别急 There are some stamps from Canaba.急用`! 宁波英孚幼儿英语如何的? By his death,one of England's greatest writers is lost to the world这句话怎么理解?这句话包含的语法知识有哪些?①By his death,为什么用By?②为什么是 is lost to ③整句话的意思? There is a word.If you take the whole from it ,there is still some left.What is it? 宁波小新星幼儿英语和英孚哪个排名比较好? 高分求SAT作文素材“do we need other people to understand overselves?”需要写这篇文章,希望能提供一些例子.好的有追加. 在教室里,用句型There's There's some There are some在教室里,用句型There's There's some There are some 写六句话 I gave that boy so difficult a math problem ____ he couldn’t work out A.that B.which C.I gave that boy so difficult a math problem ____ he couldn’t work out A.that \x05\x05B.which \x05\x05C.as \x05D.when那个正确,为什么 in order not to let the other people down 这里的down怎么理解啊 as time goes by和as time goes on的区别回答越详细越准确 There will be asale on tomorrow改为一般疑问句
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘