返回首页  设为首页  加入收藏  今天是:
网站首页电脑主板电脑cpu电脑内存电脑硬盘电脑显卡电脑电源显示器电脑配件电脑维修
相关文章
 为什么不能直接使用中文编程
 他们发现彩色的纳米世界!三…
 三星 Galaxy Tab S9 FE  FE+…
 Steam Deck能玩switch游戏吗…
 三名科学家分享2023年诺贝尔…
 便携式显示器可作为笔记本电…
 美股异动谷歌(GOOGLUSGOOGUS…
 酷睿I9 12900HX和12950HX有什…
 有重要资料的笔记本电脑被盗…
 谷歌将在印度生产笔记本电脑…
 联手惠普!谷歌将在印度生产…
 回头看:技嘉主板“烧”内存…
 沪首批贸易型总部年销售额超…
 沪首批贸易型总部年销售额超…
 华南金牌X99-BD4主板:使用体…
 攒机单点评:便宜可以但别胡…
 vr眼镜怎么看电脑 vr眼镜当电…
 电脑显示器贴牌
 电脑屏幕贴纸图片(电脑屏幕…
 HDRI环境贴图制作原理和应用…
 食品包装袋二氧化碳透过率测…
 暑假时尚家庭首选!十二款超…
 海南清华显示器有限公司
 绿色商务领航——三星超薄LE…
 长期批发清华紫光17寸LCD正屏…
 评测导购_评测
 最新笔记本CPU的性能排名 笔…
 2022笔记本cpu天梯图发布 20…
 最新笔记本CPU天梯图2020 最…
 笔记本电脑cpu排名榜 2023年…
 鲁大师Q3季度PC处理器排行:…
 DIY从入门到放弃:为什么电脑…
 周六福拟上市深交所主板募资…
 上市公司内生动能增强
 常见插槽电脑主板图解快速认…
 外资引领A股暴涨 布局讲究方…
 24GB内存手机来了与其卷内存…
 微信被吐槽占用内存太大 知情…
 南亚科总经理:远距离通信需…
 如何使用指针数据包定义数据…
 升级内存后电脑性能不升反降…
 电脑显卡图片下载
 GTX 1630显卡相当于gtx多少 …
 Intel显卡“宣传大使”突然离…
 电脑显卡图片图
 AMD高管确认:RX 7000系显卡…
 热门PC电源排行
 品牌榜:2023年台式机电源十…
 电脑电源什么牌子质量好?电…
 电源三大品牌(电源企业)
专题栏目
网络
您现在的位置: 电脑评测网 >> 电脑内存 >> 正文
高级搜索
为什么不能直接使用中文编程
作者:佚名 文章来源:本站原创 点击数: 更新时间:2023/10/5 12:12:10 | 【字体:

  腾飞卡盟”,比特是计算机内存中的最小单位(也称原子单位),在计算机系统中,每 bit 可用 0 或 1 表示数位讯号。

  在上篇文章中,我们了解到不管是磁盘还是网络传输,最小的存储单元都是字节。

  有的同学可能又会发出疑问,为什么不直接使用比特存储?字节和比特又有什么关系呢?

  虽然比特是硬件上的最小单元,但是光靠 1 和 0 很难知道是什么意思,比特就好比身体的细胞,由于颗粒度太细,很难知道这个细胞属于哪个地方,于是就有了字节这个概念,字节就好比身体的某个器官,更便于识别。

  通过这一串的 8 个 1 和 0 的不同排列方式,可以表达出 256 个(2的8次方)不同的意思,这样换算率在当时的美国科学家看来,已经足够表达英文中全部字母大小写及符号加控制符了,也就是下文我们要介绍的 ASCII 字母代码表。

  上个世纪 60 年代,为了更好的便于计算机传输字符信息,美国制定了一套字符编码规则,对英语字符与二进制位之间的关系做了统一规定,这编码规则被称为 ASCII 编码(美国标准信息交换码),一直沿用至今。

  ASCII 编码一共规定了 128 个字符的编码规则,这 128 个字符形成的集合就叫做ASCII 字符集。

  在早期的 ASCII 编码中,规定使用单字节中低位的 7 个比特去编码所有的字符,每个字符占用一个字节的后面7位,最前面的1位统一规定为 0。

  在这个编码规则下,当你在键盘上输入字母 A,计算机会根据 ASCII 字符代码表,找到对应的十进制码值 65,然后换算成二进制码值 01000001,传输到目的地;接受端收到信号之后,会将二进制码值 01000001 再换算成十进制码值 65,然后再根据字符代码表,将十进制码值 65 解码成字母 A,最后输出到控制台。

  在 ASCII 编码中,编号 031 是控制字符如换行回车删除等,32126 是可打印字符,可以通过键盘输入并且能够显示出来,一个英文字符占用一个字节。

  对于英语来说,用 128 个符号编码就够了,但是随着计算机的快速发展,用来表示其他语言,128 个符号是远远不够的。

  所以当 ASCII 码到欧洲的时候,一些欧洲国家就决定对 ASCII 编码进行适当的 扩展和改造,现有的编码规则维持不变,把字节中闲置的最高位也编入新的符号。比如,法语中的 é 的编码为 130(二进制 10000010 )。这样一来,这些欧洲国家使用的编码体系,可以表示最多 256 个符号,这个编码统称为 EASCII(Extended ASCII)。

  但是欧洲的语言体系有个特点:小国家特别多,每个国家可能都有自己的语言体系,语言环境十分复杂。因此即使 EASCII 可以表示 256 个字符,也不能统一欧洲的语言环境。

  为了解决上面这个问题,欧洲的工程师们想出了一个折中的方案:在 EASCII 中表示的 256 个字符中,前 128 字符和 ASCII 编码表示的字符完全一样,后 128 个字符每个国家或地区都有自己的编码标准。

  比如,130 在法语编码中代表了 é,但是在希伯来语编码中代表字母 Gimel (ג),在俄语编码中又会代表另一个符号。但是不管怎样,所有这些编码方式中,0—127 表示的符号是一样的,不一样的只是 128—255 的这一段。

  根据这个规则,就形成了很多子标准:ISO-8859-1、ISO-8859-2、ISO-8859-3、……、ISO-8859-16。这些子标准适用于欧洲不同的国家地区。具体关于 ISO-8859 的标准请参考这个链接地址。

  到了亚洲国家,使用的文字符号就更多了,汉字就多达 10 万多个。根据上面的信息,我们知道一个字节最多只能表示 256 种符号,这对于汉字来说肯定是不够的,必须使用多个字节表达一个符号。因此才出现了后面的 GB2312、Unicode 等字符集,简体中文常见的编码方式是 GB2312,使用两个字节表示一个汉字,所以理论上最多可以表示 65536 个符号;而 Unicode 字符集是一个很大的字符集合,最多可以使用 4 个字节来表示一个符号,可以容纳 100 多万个符号。

  关于字符集的故事发展,我们在此不过深入的讲解,有兴趣的朋友可以看看这个链接地址!

  在上文的信息中,我们了解到不同的国家有不同的字符集,如果通过电子邮件把信息传送到另外一个国家的计算机系统中,看到的可能就不是那个原始发送的字符了,很有可能而是乱码!

  因为计算机里面并没有真正的字符,字符都是以数字的形式存在的,通过邮件传送一个字符,实际上传送的是这个字符对应的字符编码,同一个数字在不同的国家和地区代表的很可能是不同的符号。

  为了解决各个国家和地区之间各自使用不同的本地化字符编码带来的不便,工程师们将全世界所有的符号进行了统一编码,称之为 Unicode,也被称为统一码、万国码。

  所有字符不再区分国家和地区,都是人类共有的符号,如中字在 Unicode 中不再是 GBK 中的 D6D0,而是在任何地方都是 4e2d,如果所有的计算机系统都使用这种编码方式,那么 4e2d 这个字在任何地方都代表汉字中的中。

  需要注意的是,Unicode 只是一个字符集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何编码如何存储。这就造成了两个问题:

  :如何才能区别 Unicode 和 ASCII ?计算机怎么知道三个字节表示一个符号,而不是分别表示三个符号呢?

  :我们知道,英文字母只用一个字节表示就够了,如果 unicode 统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必然有二到三个字节是 0,这对于存储来说是极大的浪费,文本文件的大小会因此大出二三倍,这对当时存储器来说,是无法满足的。

  早期,Unicode 转换格式规定不管什么字符都使用两个字节表示,两个字节其实就是 16 Bit,所以叫做 UTF-16。

  UTF-16 编码非常方便,每两个字节表示一个字符,这个在字符串操作时大大简化了操作,编码效率也比较高,尤其适合在本地磁盘和内存之间操作,可以进行字符和字节之间的快速切换。

  但是缺陷也很明显,首先就是一个字符占用两个字节,因为很大一部分字符用一个字节表示就够了,现在需要用两个字节,存储空间放大了一倍;其次在网络之间传输数据,容易因为大小端问题,传输后读取的数据会出现乱码。

  随着互联网的普及,强烈要求出现一种统一的编码方式,为了解决 UTF-16 中的缺陷,基于此又诞生了一种可变长度技术,每个编码区域有不同的字节长度,不同类型的字符可以是由 1~4 个字节组成,这种编码规则我们称为 UTF-8,由 Ken Thompson 于1992年创建,用在网页上可以统一展示页面上的中文英文繁体及其它语言正常显示。

  UTF-8 最大的一个特点,就是它是一种变长的编码方式。它使用 1~4 个字节表示一个符号,根据不同的符号而变化字节长度,UTF-8 编码可以容纳 2^21 个字符,总共 200 多万个字符。

  1.对于单字节的符号,字节的第一位设为0,后面7位为这个符号的 unicode码。因此对于英语字母,UTF-8 编码和 ASCII 码是相同的,可以完全兼容过去的编码规则

  2.对于 n 字节的符号(n

  1),第一个字节的前 n 位都设为1,第 n+1 位设为0,后面字节的前两位一律设为 10。剩下的没有提及的二进制位,全部为这个符号的 unicode 码

  对不同范围的字符使用不同长度的编码方式,详细的规则如下,其中字母 x 表示可用编码的二进制位。

  但其实,Java 内部还实现了ASCII、LATIN1、ISO8859-1、UTF-8、GBK 等字符集的编码规则,可以很容易实现这些编码之间的相互转换。

  在保证跨平台特性的前提下,也支持了全扩展的本地平台字符集,默认显示输出和键盘输入都是采用的本地编码规则,因此,免不了二者的转化问题。

  Java 中的各个类,对于英文字符的支持都非常好,可以正常地写入文件中,但对于中文字符就未必了!

  从 Java 源代码到写入文件正确的内容,要经过 Java 源代码 ->

  Java 字节码 ->

  虚拟机 ->

  文件几个步骤,在上述过程中的每一步都必须正确地处理汉字的编码,才能够使最终有我们期望的结果。

  其中Java 源代码 ->

  Java 字节码这一步骤,Java 编译器 Javac 使用的字符集是系统默认的字符集,比如在中文 Windows 操作系统上就是 GBK,而在Linux操作系统上是 ISO8859-1。所以经常有同学发出疑问,自己在本地的 windows 系统上运行的很正常,但是把代码部署到了 Linux 操作系统上编译的类中源文件中的中文字符就出现乱码了。

  解决办法就是在编译的时候添加 encoding参数,并指定对应的编码规则,比如 GBK 或者 UTF-8,这样才能够与平台无关。

  输出的内容比较多,重点看下file.encoding变量值就可以,比如小编当前的电脑显示结果如下:

  表明了 JDK 使用的是 GBK 字符集,当对字符串进行操作时,都做了 Unicode 到 GBK 的转换,既然 JDK 用的 GBK 编码,那么用 ISO8859-1 字符集显示 GBK 编码出来的中文当然是有问题的。

  因此在实际使用过程中,推荐大家统一编码规则,比如采用比较通用的 UTF-8 编码规则,可以避免无端的文字乱码问题。

  本文主要围绕计算机进行字符传输时碰到的问题,进行了一次简单的知识梳理总结,内容难免有所遗漏,欢迎网友留言指出!

  最近网上有传闻说,采用中文来编程,大家可以试想一下,采用中文来编程会是个什么样的结果?

  通过上面的分析,我们可以得出一个结论,那就是采用中文编程,如果没有统一编码规则的情况下,会是个灾难;其次也会增加程序员们的工作难度,因为从字节来看,一个汉字至少等于英文的两个字符,所以使用汉字会更加占内存。

  还有一点就是,英文最多也就 26 个字符,比较简单,在所有的计算机上都非常通用,如果换成中文的话,截止目前,中文的符号已经超过 10 万个了,还没有完全收集全,如果换成中文来编程,需要穷举所有的中文字符,以防干扰程序的正常执行,这在目前看来基本弊大于利!

电脑内存录入:admin    责任编辑:admin 
  • 上一个电脑内存:

  • 下一个电脑内存: 没有了
  •  
     栏目文章
    普通电脑内存 为什么不能直接使用中文编程 (10-05)
    普通电脑内存 24GB内存手机来了与其卷内存不如好好治理App生… (10-03)
    普通电脑内存 微信被吐槽占用内存太大 知情人士证实微信小绿… (10-03)
    普通电脑内存 南亚科总经理:远距离通信需求能稳住第二季市… (10-03)
    普通电脑内存 如何使用指针数据包定义数据缓冲区 (10-03)
    普通电脑内存 升级内存后电脑性能不升反降发锅了谁来背一下 (10-03)
    普通电脑内存 瑞芯微系列工控芯片方案亮相工博会助力工业领… (10-02)
    普通电脑内存 C++中常用关键字详解(2) (10-02)
    普通电脑内存 嵌入式C语言中的结构是什么? (10-02)
    普通电脑内存 单条128GB DDR5内存出样:1TB也不远了 (10-01)
    普通电脑内存 华为nova10有没有无线充电 可以插内存卡吗? (10-01)
    普通电脑内存 iPhone16曝光:全系高刷+8G内存+256G起步售价… (10-01)
    普通电脑内存 红米Redmi Note 12什么时候发布 可以插内存卡… (10-01)
    普通电脑内存 iPad 10运行内存多大 电池容量多大? (10-01)
    普通电脑内存 超占手机内存又不敢删!这个热搜让无数人感同… (10-01)
    普通电脑内存 用户苦“内存刺客”久矣多大的手机内存能治好… (10-01)
    普通电脑内存 10年间手机内存从1G到16GPC内存为何依然停滞不… (10-01)
    普通电脑内存 i7-13700KF睿频是多少 最大内存带宽是多少? (10-01)
    普通电脑内存 美商海盗船发布新款统治者泰坦DDR5内存:高端… (10-01)
    普通电脑内存 “我第一次给 Linux 内核做贡献不仅被剥夺了还… (09-30)