C ASN1 UTF-8字符串解码

C ASN1 UTF-8字符串解码,c,utf-8,asn.1,decoder,utf8-decode,C,Utf 8,Asn.1,Decoder,Utf8 Decode,我正在用C语言制作一个ASN.1解析器(使用爱立信ASN1规范文档)。我想解码UTF-8字符串类型,但我无法在线找到有关此类型的信息,并且我使用的文档没有详细描述UTF-8字符串。谁能给我一些代码,或者解释一下如何解码 我是ASN.1的新手。维基百科页面的表格中总结了完整的UTF-8描述,允许您编写编码器和解码器: 如果您试图解析ASN.1,那么有一个非常好的介绍性资源(可以在web上的不同位置找到,HTML和PDF格式)。但是,该文档没有提到UTF8String类型 您需要知道的额外信息是UT

我正在用C语言制作一个ASN.1解析器(使用爱立信ASN1规范文档)。我想解码UTF-8字符串类型,但我无法在线找到有关此类型的信息,并且我使用的文档没有详细描述UTF-8字符串。谁能给我一些代码,或者解释一下如何解码


我是ASN.1的新手。

维基百科页面的表格中总结了完整的UTF-8描述,允许您编写编码器和解码器:


如果您试图解析ASN.1,那么有一个非常好的介绍性资源(可以在web上的不同位置找到,HTML和PDF格式)。但是,该文档没有提到
UTF8String
类型

您需要知道的额外信息是
UTF8String
具有(十进制,或
0c
十六进制),并且它被编码为表示UTF-8编码中字符串的字节序列

因此,字符串“Helló”将被编码为

0c 06 48 65 6c 6c c3 b3

(顺便说一句,我认为“爱立信ASN1规范文档”讨论的是标准ASN.1,而不是一些变体。)

描述了UTF-8如何编码字符,甚至有C语言的示例代码。我假设这个问题是关于将ASN.1
UTF8String
序列解码到UTF-8字节数组中,与从这些字节转换为Unicode字符串相反(也就是说,
utf8 decode
标记不太合适)。你能证实这一点吗?(如果是的话,也许可以在问题中澄清)我为什么得到-2分?这个问题出了什么问题?@user3148326我认为人们把你对ASN.1 UTF8String类型信息的请求(非常罕见)误认为是对一般UTF-8字符串信息的请求(非常常见,很容易被谷歌搜索)关于我使用的一个商业ASN.1工具集,令人失望的一点是它没有检查编码/解码的UTF8字符串是否确实是有效的UTF8。UTF8String被简单地视为另一个八位字节字符串,它可以表示任何旧的字节字符串。UTF8有关于哪些字节跟随哪些字节的规则,因此某些字节组合无效。如果ASN.1编译器以与检查ASN.1模式中声明的任何其他值或大小约束相同的方式添加对此的检查,这将是一件好事。这将添加另一层内置内容检查(注释空间不足)。其他字符串类型也是如此,如IA5String等。请注意,当编码字符串的长度>127时,将使用以下规则构造表示该长度的字节:0c(表示UTF8type),然后是长度(一个八位字节),然后是实际的UTF8字节-1这与问题几乎无关。任何人都可以在谷歌上搜索UTF-8规范。。问题是这些字符串是如何处理/编码的