时间:2023-08-14 18:12:08 浏览:28
《为什么 string 要设计成 final ,又如何设计一个不可变类呢?》留下了一个编码相关的问题。在java中,一个字符(汉字字母)理论上占用两个字节。但在utf-8,新字符串(“单词”)。getbytes()。length返回3,这意味着3个字节。你知道为什么吗?java中char占用多少字节?
在回答这个问题之前,我们先学习一些基础知识。
什么是字符集?什么是编码?
字符(character )是文字与符号的总称,包括文字、图形符号、数学符号等。 一组抽象字符的集合就是字符集(charset )。
之所以说“抽象”,是因为这里说的人物是没有任何具体形式的人物。比如文章里看到的“韩”这个人物,其实就是这个人物的一个具体表现,就是它的形象表现。当人们读“韩”这个词时,他们使用另一种具体的表现形式——声音。但无论如何,这两种表达方式指的是汉字,同一汉字可能有无数种表达方式(点阵、矢量法、音频等)。).如果每个表达式中的相同字符包含在字符集内,会使字符集过大。对于因此抽象字符集中的字符,都是指唯一存在的抽象字符,而忽略了它的具体表现形式。在给定一个抽象字符集合中的每个字符都分配了一个整数编号之后,这个字符集就有了顺序,就成为了编码字符集。同时,这个编号,可以唯一确定到底指的是哪一个字符。,的同一个字符,不同字符集编码系统指定的整数是不同的。例如,单词“er”,在unicode中,它的数字是0x513f,这意味着它是unicode中的第一个0x513f字符。在另一个编码字符集中,单词是0xa449。
编码字符集,指的是这种被分配了整数编号的字符集合,但是编码字符集中字符被分配的整数编号,不一定就是该字符在计算机中存储时所使用的值,计算机中存储的字符到底使用什么二进制整数值来表示,由字符集编码决定。
在字符集编码决定了如何将一个字符的整数编号对应到一个二进制的整数值。,几乎所有英文字符的字符集代码中,英文字母的整数数字与计算机中存储的二进制形式一致。但是有些编码方法,比如适用于unicode字符集的utf-8,是将大量字符的整数进行转换,存储在计算机中。例如,“中文”的unicode值是0x6c49,但其编码格式是utf-8,其值是0xe6b189 (3字节)。
编码字符集里的每一个字符,都对应到唯一的一个代码值,这些代码值叫做码点(code point ),可以看做是这个字符在编码字符集里的序号,字符在给定的编码方式下的二进制比特序列称为码元(code unit )。
注意:我们在这里引出了两个概念,码点和码元。
为什么要区分字符集和编码?
早期字符集和编码是一对一的。字符编码方案很多,一个字符集只有一种编码实现,两者一一对应。比如gb2312,在这种情况下,不管怎么称呼,比如“gb2312代码”和“gb2312字符集”,其实都是一样的东西,本身也不一定有什么区别,反正不可能错。
说到unicode,就不一样了。唯一的unicode字符集对应于三种编码:utf-8、utf-16和utf-32。字符集、编码等概念完全分离、模块化,在unicode时代得到广泛认可。
1)字符集是字符集的简称,即字符集。
2)编码是字符集编码的简称,即字符集编码。
从上图可以清楚地看出,
1、编码是依赖于字符集的,就像代码中的接口实现依赖于接口一样;
2、一个字符集可以有多个编码实现,就像一个接口可以有多个实现类一样。
为什么unicode这么特别?
想出一个新的字符集标准就是旧字符集字符不够用。
unicode旨在统一所有字符集,包括所有字符,因此没有必要编辑任何新的字符集。
但是如果你觉得它现有的编码方案不是很好呢?在没有新字符集的情况下,我们只能在编码上做文章,所以实现很多,从而打破了传统的一一对应。
从上图可以看出,由于历史原因,你也会看到unicode和utf-8在很多地方混在一起。这种情况下的unicode通常是utf-16或更早的ucs-2编码。
关于unicode,我们已经谈了很多。出于各种原因,必须承认,“unicode”一词在不同的语境中有不同的含义。它可能指:
1)unicode 标准
2)unicode 字符集
3)unicode 的抽象编码(编号),也即码点( code point )
4)unicode 的一个具体编码实现,通常即为变长的 utf-16,又或者是更早期的定长 16 位的 ucs-2。
在重点介绍下 utf-16 编码,utf-16将unicode字符集的代码点映射成一个16位整数序列(即长度为2字节的符号),用于数据存储或传输。unicode字符的代码点需要用一个或两个16位符号来表示,所以这是一种可变长度的表示。
utf-16可视为ucs-2的父集。utf-16和ucs-2在没有辅助平面字符之前的意思是一样的(基本思想是用两个16位代码表示一个字符,只针对65535以上的字符)。引入辅助平面字符后,称为utf-16。
现在,如果某些软件声称支持ucs-2编码,实际上意味着它不能支持utf-16中超过2字节的字符集。对于小于0x10000的ucs码,utf-16编码等于ucs码。
为什么要重点介绍 utf-16 编码,因为 java 的内码使用的是 utf-16 编码,也就是我们常说的 unicode 编码。
没想到这么长,只是介绍了字符集和编码的区别。看来有必要分两篇回答前一篇留下的问题。这篇文章的总结其实就是两句话:
编码字符集里的每一个字符规定的顺序,叫码点(code point ),而这个字符在编码字符集里的序号,在给定的编码方式下的二进制序列叫码元(code unit )。
在爪哇世界,我们与外码,即程序与外部交互时外部使用的字符编码,有更多的接触,但你不知道更多。我们期待下一期进入java的编码世界,最终回答上面提到的问题。
支付宝忘记密码怎么办(恢复我以前的支付宝)
随着移动支付的兴起,一些银行机构和移动支付企业提供了“移动支付服务”。为了保护用户的安全,这些机构要求用户设置登录密码以及“支付密码”。但是支付密码不常用,导致很多用户忘记了,却不知道怎么找回。本文以支付宝为例,教你如何找回支付密码。
银行、微信或支付宝等支付机构在这些平台上申请账户时,必然会要求用户绑定手机号码和实名认证。一些机构还会要求用户绑定自己的电子邮件,而电子邮件和手机号码实际上是找回支付密码的方式之一。
先打开支付宝软件,然后点击支付宝右下角的“我”。如下图:
在“我的”选项中找到“齿轮状”图标,点击进入账户设置界面。如下图:
然后在设置选项中找到“账号和安全”选项。如下图:
点击账号和安全选项,然后下拉菜单找到“支付密码”选项。如下图:
然后在弹出的界面中选择“记住”,进入支付密码修改界面。如下图:
进入支付密码修改界面后,选择“以另一种方式重置密码”。如下图:
然后您将看到几种检索支付密码的方法,如下所示:
如果不记得支付密码,可以使用刷脸、短信验证码、银行卡信息、邮箱id号等方式进行检索。选择其中一个后,输入相应的正确信息,即可重置密码。以刷脸为例。选择刷脸方式取回支付密码后,手机界面会出现提示。
oppo手机6位数万能密码(oppo六位密码强制解锁)
现在手机里有很多软件,听歌,追剧,聊天等。虽然现在大多数软件都支持一键登录,但有时还是需要使用登录密码。不是所有的软件都统一设置一个登录密码是安全的,但是长时间设置不同的密码就不记得了。oppo手机自带“密码本”功能,既安全又方便。如果你记不住密码,我们会帮你记住,你再也不怕忘记了!我们以oppo reno5系列手机为例,看看如何一起使用。
“密码本”功能是隐私功能。打开“设置”,输入“隐私”
在“隐私”中输入“密码本”,并打开“密码本”开关
第一次使用密码时,需要根据提示设置锁屏密码。设置锁屏密码后,除了你(包括oppo官方)没有人有权查看你的账号和密码。
在上述步骤之后,码本的初始设置完成。大家打开“喜马拉雅fm”app,看看码本的实际应用吧~
密码登录时,密码本会自动询问是否保存。点击保存后,账号和密码将存储在密码本中。
当密码第二次登录时,密码会自动弹出填写密码的请求。此时,您只需输入锁屏密码即可登录。其他应用也是如此,我们只需要记住锁屏密码!从此,我再也不怕忘记密码了。赶紧试试吧~
农行k宝密码忘了怎么办(k宝密码忘了怎么重置)
农行网银的体验真的很差。解决这个问题的方法是重新下载kbao的驱动,然后拔出kbao,重启浏览器找到证书。下次可能会提示您找不到证书。没关系,重复以上动作即可。这是什么?让你难受的是等你进入农行网银页面。慢慢感受。祝你心情愉快!
1.农行网银长期停用,k-bao密码连续输入多次,导致错误。
2.带上身份证,银行卡,k-bao,去附近农行分行。
3.上班时间去银行网点后,排队取号,咨询银行大堂经理,说明需要重新设置kbao的密码。
4.重置kbao密码服务免费。
5.然后填写业务处理单,到号后向柜员出示身份证和银行卡,再次刷新k宝,设置新密码。
相关文章
怀孕周期
备孕分娩婴儿早教
猜你喜欢