字符编码的相关知识联想到本地二进制代码困惑

问题描述

最近在看字符编码的相关知识,又联想到二进制代码的知识,由于本人不是科班出身,对一些二进制代码即本地代码了解不深,所以有几个问题感到很困惑,所以希望懂相关知识的人帮我顺一顺。VS默认是将文本本件(包括cs文件)以utf-8编码方案编码成字节的,举个例子我们AaBb经过utf-8编码后是E6 88 91 E4 BB AC 41 61 42 62E6 88 91(代表我) E4 BB AC(代表们) 41(A) 61(a) 42(B) 62(b)第一个问题:我是不是可以认为将这些16进制转换成2进制后就是 我们AaBb 在计算机的存储方式? 如下11100110 10001000 10010001(代表我) 11100100 10111011 10101100(代表们) 1000001(A) 1100001(b) 1000010(B) 1100010(b)如果换成是utf-16编码的 Little_Edian方式(每个字符占2个字节) 就是11 62(代表我) EC 4E(代表们) 41 00(A) 61 00(a) 42 00(B) 62 00(b)既然说到了2进制,我就想起了本地代码,从开始学语言的时候就看到各种各样的人说机器语言是01010这种2进制云云...那么对于C# java先看一下下面源代码 C#,java ↓托管代码 .NET:IL(中间语言) JAVA:字节码等 ↓非托管代码(本地代码,二进制代码,机器语言)http://baike.baidu.com/view/2418160.htm首先看源代码,如果我们只是保存它们,当然就是像上面那样用某种编码方式将其保存成字节第2个问题:如果我们对源代码进行了编译,使其变成了托管代码,windows下的托管代码叫做可移植执行体,那么这些托管代码肯定也是以2进制形式存储在硬盘里,那么这时的我们编译得来2进制形式与我们直接保存得来的2进制形式的区别在哪里?第3个问题:当将托管代码编译成本地代码后,啊哈,这就是人们常说的本地2进制代码,这些本地2进制代码与之前的托管2进制代码的区别在哪里? 我知道后者要依赖CLR或jvm,但除此之外呢?看了上面的提问,感觉我要问的好像是编译的得到的2进制代码与编码得到的2进制代码有什么区别,然后是编译源代码得到的2进制代码与编译托管代码得到的2进制代码有什么区别。第4个问题:既然编码字符需要考虑编码方案的问题,那么图片视频呢? 就拿.net中socket传输字符串来讲也是需要考虑编码方案的,为什么传输图片就不需要考虑编码呢? 图片不是也有jpg gif等好多格式吗?

解决方案

一下子问4个问题,才给5分。。。 第一个问题:我是不是可以认为将这些16进制转换成2进制后就是 我们AaBb 在计算机的存储方式?A:16进制和2进制都只是数字的一种表示形式,是外在的表现,对内在的实际涵意没有任何影响。你可以这么理解,机器读2进制比较方便,因为简单。人读16进制比较方便,因为简略。第2个问题:如果我们对源代码进行了编译,使其变成了托管代码,windows下的托管代码叫做可移植执行体,那么这些托管代码肯定也是以2进制形式存储在硬盘里,那么这时的我们编译得来2进制形式与我们直接保存得来的2进制形式的区别在哪里? A:这涉及到编译原理的问题,当然这里可以用比较通俗的方式讲就是,你的代码都是用文本方法写的,所以直接保存的也都是字符串,人可以理解是代码,但机器只能识别为字符串。 要想让机器识别成可执行的代码,那就要通过一定的规则转换成机器码。转换后机器就可以执行了,但人去看就是一堆乱码了。第3个问题:当将托管代码编译成本地代码后,啊哈,这就是人们常说的本地2进制代码,这些本地2进制代码与之前的托管2进制代码的区别在哪里? 我知道后者要依赖CLR或jvm,但除此之外呢? A:首先,你要明白为什么要分成“托管代码”和“本地代码”,这主要是因为执行平台的不同,导致你要写多种不同的代码来实现相同的功能。为了解决这个问题,就出现了“虚拟机”如JVM,这样的东西。 主要的原理就是你根据“虚拟机”所提供的功能来实现业务逻辑,我为不同的平台开发做不同的“虚拟机”来实现我所提供的功能,这样就可以跨平台了。 剩下的你应该明白一点了吧第4个问题:既然编码字符需要考虑编码方案的问题,那么图片视频呢? 就拿.net中socket传输字符串来讲也是需要考虑编码方案的,为什么传输图片就不需要考虑编码呢? 图片不是也有jpg gif等好多格式吗?A:说简单点,因为图片是大文件,可以有自己的文件格式,比如,GIF文件的文件头就是git,ZIP文件的文件头就是'PK'等等,所以它们都可以被很容易的识别。而字符串不一样,它们很零碎,种类也很多。如GBK,是中文的编码,里面只有中文和英文,而UTF-8是包含了所有的语言。他们实现上就是通过对数字的分段来实现识别不同的文字。当然识别的越多所需要的数字就越大,所需要的存储空间和网络流量就越多,所以在socket里尽量选择合适的编码,来提高性能。就说这么多吧,希望能给你一点小小的帮助

时间: 2024-09-20 04:20:47

字符编码的相关知识联想到本地二进制代码困惑的相关文章

中文字符集与字符编码的基础知识

字符是各种文字和符号的总称,包括各国家文字.标点符号.图形符号.数字等.字符集是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,常见字符集名称:ASCII字符集.GB2312字符集.BIG5字符集.GB18030字符集.Unicode字符集等.计算机要准确的处理各种字符集文字,需要进行字符编码,以便计算机能够识别和存储各种文字. 中文文字数目大,而且还分为简体中文和繁体中文两种不同书写规则的文字,而计算机最初是按英语单字节字符设计的,因此,对中文字符进行编码,是中文信息交流的技术基

ajax代理程序,自动判断字符编码_AJAX相关

由于ajax在跨域的访问上有问题,目前最好的方法是做代理.写了个代理程序和心得 为了做ajax的代理,研究了下服务器端的xmlhttp并和客户端的ajax中的xmlhttp做了个比较,后台代码是asp的 服务器端的xmlhttp也就是asp小偷程序,我把代码改成了javascript. 1.在服务器端的xmlhttp.Open("GET",url,false)异步必须是关闭的,而客户端的异步是打开的,这个很好理解. 2.在服务器端的xmlhttp.Responsebody 这里用的是R

彻底搞懂字符编码(unicode,mbcs,utf-8,utf-16,utf-32,big endian,little endian...)

最近有一些朋友常问我一些乱码的问题,和他们交流过程中,发现这个编码的相关知识还真是杂乱不堪,不少人对一些 知识理解似乎也有些偏差,网上百度,google的内容,也有不少以讹传讹,根本就是错误的(例如说 unicode编码是两 个字节),各种软件让你选择编码的时候,常常是很长的一个选单,让用户不知道该如何选.基于这样的问题,我就写 下我的理解吧,一方面帮助一些需要帮助的人纠正认识,一方面作为自己以后备查的资料. 1.ASCII(American Standard Code for Informat

[IT]HTML网页源码的字符编码(charset)解释

当你通过浏览器,打开某个网站,即某个url地址的时候,你所能正常看到网页的内容,各种文字,都可以正常显示,且没有显示乱码. 此过程,涉及到,浏览器帮你正确解析HTML源码,其中涉及到HTML网页源码的字符编码处理方面的问题. 和字符编码处理相关的大概逻辑是: 1.浏览器访问对应的url地址,并获取对应的HTML(或者,以及,其他的css,javascript等)网页源码 2.浏览器识别解析HTML源码内容 其中包含了解析HTML的头部(head),找到对应的charset和Content-typ

浅谈JavaScript中的字符编码转换问题_基础知识

要获得字符的Unicode编码,可以使用string.charCodeAt(index)方法,其定义为:    strObj.charCodeAt(index)       index为指定字符在strObj对象中的位置(基于0的索引),返回值为0与65535之间的16位整数.例如: var strObj = "ABCDEFG"; var code = strObj.charCodeAt(2); // Unicode value of character 'C' is 67      

字符编码详解——彻底理解掌握编码知识,“乱码”不复存在

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://polaris.blog.51cto.com/1146394/377468  每一个程序员都不可避免的遇到字符编码的问题,特别是做Web开发的程序员,"乱码问题"一直是让人头疼的问题,也许您已经很少遇到"乱码"问题,然而,对解决乱码的方法的内在原理,您是否明白?本人作为一个程序员,在字符编码方面同样遇到不少问题,而且一直对各种编码懵懵懂懂.不清不楚:

解析JavaScript中的字符串类型与字符编码支持_基础知识

定义字符串就是零个或多个排在一起的字符,放在单引号或双引号之中. 'abc' "abc" 单引号字符串的内部,可以使用双引号.双引号字符串的内部,可以使用单引号. 'key = "value"' "It's a long journey" 上面两个都是合法的字符串. 如果要在单引号字符串的内部,使用单引号(或者在双引号字符串的内部,使用双引号),就必须在内部的单引号(或者双引号)前面加上反斜杠,用来转义. 'Did she say \'Hello

字符编码知识:Unicode、UTF-8、ASCII、GB2312等编码之间是如何转换的?

转自:  http://apps.hi.baidu.com/share/detail/17798660 字符编码是计算机技术的基石,想要熟练使用计算机,就必须懂得字符编码的知识.不注意的人可能对这个不在意,但这些名词有时候实在让人迷惑,对想学习计算机知识的人来说,搞懂它也十分重要,我也是在学习中慢慢了解了一些这方面的知识. 1. ASCII码      在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被

java中文乱码解决之道(二)—–字符编码详解:基础知识 + ASCII + GB**

一.基础知识 在了解各种字符集之前我们需要了解一些最基础的知识,如:编码.字符.字符集.字符编码基础知识. 编码 计算机中存储的信息都是用二进制表示的,我们在屏幕上所看到文字.图片等都是通过二进制转换的结果.编码是信息从一种形式或格式转换为另一种形式的过程,通俗点讲就是就是将我们看到的文字.图片等信息按照某种规则存储在计算机中,例如'c'在计算机中怎么表达,'陈'在计算机中怎么表达,这个过程就称之为编码.解码是编码的逆过程,它是将存储在计算机的二进制转换为我们可以看到的文字.图片等信息,它体现的