猿问
回到首页
个人中心
反馈问题
注册登录
下载APP
首页
课程
实战
体系课
手记
专栏
慕课教程
汉字和英文在计算机中怎么存储的?存储占多大?
常听说一个汉字占两个字节,为什么会占两个字节,英文单词怎么存储?
宝慕林4294392
浏览 1492
回答 3
3回答
倚天杖
普及字符是如何被存储的。在计算机中,所有数据都是用0和1这样的位来描述。一个字节有8位,因此一个字节最多可以描述256个字符。在欧美国家,比如美国,他们的文字字符主要就是26个字母加上一些特殊符号(+-*/等),用一个字节就可以存储,一个国家使用的所有字符就是一个code page,用一个字节存储字符的code page 叫做single-byte code page。但是在亚洲的一些国家,比如中国,常用汉字有几万个,根本不能用一个字节来表示所有的汉字字符,因此需要用两个字节描述。因为两个字节有16位,最多可以描述65536个字符,足够用来描述所有汉语字符以及常用字符,这些字符也是一个code page,不过是double-byte code page,主要针对的是中国。每个国家都有一个code page来对应所使用的字符。比如欧美国家,他们使用拉丁,虽然a-z这26个字母所对应的二进制在code page中是相同的,但是在重音('é'和'á')方面是不相同的。所以如果code page不同,那么相同的二进制代码所表示出来的字符也可能不相同。如果数据在不同code page的计算机上传输,就需要进行code page的转换,如果接收方的code page上没有定义传输方传送过来的特定字符的二进制位,那么就会出现数据丢失。上面讲到的这些都是同一个概念,那就是数据库中的collation。正如我们前面提到的,每一个国家可能都有自己的collation,这样的话在信息传输上会非常不方面,涉及到collation转换更是烦上加烦。那么用什么方法解决了。这个时候就出现了unicode。unicode是一个大字符表,将全世界上的所有字符都存在一个2字节的字符表中,并且全世界所有国家字符在字符表上都能找到唯一对应的标号。这样的一个好处就是我们使用了同意的字符表,就不要转换了。坏处是,想abc这样的字符,也要占用两个字节,而不是原来的一个自己。那么在sqlserver如何表现是unicode,在sqlservr中引入了nvarchar和nchar。比如nchar(10),这样的一个结构最多可以存储10个汉字,也最多只能存储10个英文字母。但是所占用的字节就是20字节。而加入是char(10)的话,没有使用unicode,那么就可以存储10个英文字母,但是最多只能存储5个汉字。
0
0
0
红糖糍粑
建议阅读:字符集和字符编码(Charset & Encoding)
0
0
0
打开App,查看更多内容
随时随地看视频
慕课网APP
继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续