UTF8String是如何编码的?

1、在解码PER编码的PDU时,IA5String字符似乎被解码,就好像从它们的数值中减去了1。为什么?

这是编码器或解码器端ASN.1语法中的拼写错误导致的常见错误。省略空格字符通常很容易。例如假设在编码器端IA定义为:

IA::=IA5String(FROM("0123456789No.*,"))

但在解码器方面:

IA::=IA5String(FROM("0123456789No.*,"))<--spaceishere

带有一个额外的空格字符“”。这导致值

aIA::="1234"

在PER中被解码为“2345”而不是“1234”。PER中允许的字母表在值的编码/解码方式中起着至关重要的作用。

2、你能解释一下UTF8String以及它是如何编码的吗?

UniversalString和UTF8String都支持完全相同的字符集,前64K字符都是BMPString中的字符集。请注意,BMPString的前128个字符与IA5String是同一组抽象字符(我们使用术语“抽象”来指出它们实际上是相同的,但它们的编码不同),并且由于BMPString是UniversalString和UTF8String意味着IA5String是这些字符串类型的前128个抽象字符。

好的,既然我们知道UTF8String不是由BMPString和UniversalString字符组成,而只是对与BMPString和UniversalString编码的字符集完全相同的一组字符进行编码的不同方式,那么让我们来谈谈它实际上是如何编码的。

简而言之,如果一个字符的第一个字节的第一位是0,则意味着这个字符是一个字节长,如果你看一下字符映射你会看到这组字符(其中有128个,自然)是美国ASCII(即IA5String)。

如果字符的前3位是110,则表示该字符长2个字节,其值为110xxxxxx10xxxxxx,其中x是有效位,110中的11表示字符长2个字节。

如果字符的前4位是1110,则表示该字符长3个字节,其值为1110xxxx10xxxxxx10xxxxxx,其中x是有效位,1110中的111表示该字符长3个字节。

如果一个字符的前5位是11110,则表示该字符长4个字节,其值为11110xxx10xxxxxx10xxxxxx10xxxxxx,其中X是有效位,11110中的1111表示该字符长4个字节。

如果字符的前6位是111110,则表示该字符长5个字节,其值为111110xx10xxxxxx10xxxxxx10xxxxxx10xxxxxx,其中X是有效位,111110中的11111表示该字符长5个字节。

如果一个字符的前7位是1111110,则表示该字符长6个字节,其值为1111110x10xxxxxx10xxxxxx10xxxxxx10xxxxxx10xxxxxx,其中X是有效位,1111110中的111111表示该字符长6个字节。

3、扩展加法的PERALIGNED编码的起始位应该是八位字节对齐还是八位字节不对齐?

它应该作为八位字节未对齐的位字段添加。

X.691(2008)的第19.7和19.8节说,扩展添加的编码从位掩码开始,该位掩码的位指示特定扩展的存在。反过来,位掩码以它的长度为前缀,根据19.8,它被编码为“通常较小的长度”。

X.691(2008)的第11.9.3.4节规定,“通常较小的长度”的编码从一个0或1的单个位位字段开始(如果扩展的数量<=64和1,则为0除此以外)。

术语“位域”在X.691(2008)的第3.7.3节中进行了解释,随后是澄清说明:

注意:如果使用该术语后跟“对齐变体中的八位字节对齐”,这意味着在PER对齐变体的完整编码中,位字段需要从八位字节边界开始。

由于X.691(2008)的第11.9.3.4节没有明确提到单个位字段是八位字节对齐的,这意味着不需要八位字节边界上的对齐。

请参阅X.691(2008)的第11.1.4节,了解如何在构建完整编码时使用位域,而不是如何使用八位字节对齐的位域。

4、有没有办法跳过解码BER中的SET/SEQUENCE中的一些不需要的字段?

是的,您可以这样做,但只能在BER/DER/CER中,而不是在PER/UPER中,因为PER的性质。考虑BER/DER/CER中的以下ASN.1语法:

基于上述语法,您可以对S1PDU进行编码,但使用S2PDU对其进行解码,其类型利用ASN.1可扩展性。第一个“...”标志着扩展的开始,第二个标志着它的结束。第二个“...”之后的字段d继续扩展根。在BER/DER/CER中,解码器将简单地跳过两个扩展标记之间的所有字段并继续使用字段d进行解码。

5、为什么零填充出现在短约束受限字符串类型的PERALIGNED编码中?

让我们考虑一下:

N::=NumericString(SIZE(0..3))

nN::="27"

和:

N::=NumericString(SIZE(0..4))

X.691(2008)的第30.5.7条说:

30.5.7如果“aub”不等于“alb”或大于或等于64K,则应调用11.9以添加前面的位字段通过一个长度行列式,其中n作为字符串中字符的计数,长度行列式为“alb”,上限为“aub”。如果“aub”乘以“b”大于或等于16,则应将位字段添加为字段(对齐变体中的八位字节对齐),否则应添加为非八位字节的位字段对齐。这样就完成了本条的程序。

THE END
1.Kotlin中级篇(六):数据类(data)密封类(sealed)所谓受限的类继承结构,即当类中的一个值只能是有限的几种类型,而不能是其他的任何类型。 这种受限的类继承结构从某种意义上讲,它相当于是枚举类的扩展。但是,我们知道Kotlin的枚举类中的枚举常量是受限的,因为每一个枚举常量只能存在一个实例。若对Kotlin中的枚举类不甚了解的,请参见我的另一篇文章Kotlin——中https://www.jianshu.com/p/c5ba40150d91
2.JAVA语言程序设计(进阶篇)第十版十九章课后题为什么Java中允许使用原始类型? 因为在实际执行语句时,java在虚拟机中是没有泛型的,会将泛型转化为一个参数类型的强制转换,执行语句是原始类型。 什么是非受限通配?什么是受限通配?什么是下限通配? 非受限通配是 ?,即?Extends object,等级在object之下; 受限通配是 ? Extends E,即 ?是E的子类或是E; 下限通配是https://blog.csdn.net/m0_67393413/article/details/126033065
3.监管规则适用指引——审计类第1号注册会计师以无法获取充分、适当的审计证据为由,对应识别的财务报表整体重大错报不予识别,规避作出恰当的职业判断,从而发表“受限”而非“错报”类型的审计意见。特别是在涉及专业判断、会计估计的领域,如合并范围、资产减值(尤其是商誉减值)、预计负债、款项可收回性等,存在较多以“受限”代替“错报”类型审计意见的https://www.shui5.cn/article/2a/15594.html
4.万兴数据管家正式上线,一键恢复和备份微信聊天记录!3.备份的数据类型会受限,部分数据不能备份; 以上就是最好用的微信数据备份的方法,其中方法一可以备份多种数据,自己独立操作,不用担心个人隐私泄露,而且是永久保存在本地,避免微信聊天记录再次丢失。以后,大家可以保存微信中重要的商业信息,或者自己男/女友的聊天记录。 https://www.admin5.com/article/20211019/1005734.shtml
5.免费客户管理系统(好用的免费CRM客户管理软件)白码CRM客户管理系统通过对客户进行全方位、多角度的跟进管理和数据分析。从而提高销售线索转化率,实现业绩增长。 免费试用 免费客户管理系统大致有两种类型,一种是免费但受限的(也叫做免费增值模式),另外一种则是开源软件。因此免费但受限的软件会对免费用户数量、联系人、存储空间、额外功能中的一种或几种进行限制。https://www.bnocode.com/article/crmbk599.html
6.环境安装类问题FAQ分析服务受限数据类型 自定义数据类型 活动类型常量 版本更新说明 应用开发 客户端开发(Android) 简介 开发流程 开发准备 注册帐号及申请服务 集成HMS Core SDK 配置混淆脚本 修改包名、导入证书指纹 登录并申请权限 DataController 开发 SensorsController 开发 AutoRecorderController 开发 ActivityRecordsCohttps://developer.huawei.com/consumer/cn/doc/development/HMS-Guides/Environment_installation