一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

UTF8String是如何編碼的?

西西 ? 來(lái)源:哲想軟件 ? 作者:cogitosoftware ? 2022-08-26 09:55 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1、在解碼PER 編碼的PDU 時(shí),IA5String字符似乎被解碼,就好像從它們的數(shù)值中減去了1。為什么?

這是編碼器或解碼器端ASN.1 語(yǔ)法中的拼寫錯(cuò)誤導(dǎo)致的常見(jiàn)錯(cuò)誤。省略空格字符通常很容易。例如假設(shè)在編碼器端 IA定義為:

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

但在解碼器方面:

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

帶有一個(gè)額外的空格字符“”。這導(dǎo)致值

aIA ::= "1234"

在PER 中被解碼為“2345”而不是“1234”。PER中允許的字母表在值的編碼/解碼方式中起著至關(guān)重要的作用。

2、你能解釋一下UTF8String 以及它是如何編碼的嗎?

UniversalString和UTF8String 都支持完全相同的字符集,前64K 字符都是BMPString 中的字符集。請(qǐng)注意,BMPString 的前128 個(gè)字符與IA5String是同一組抽象字符(我們使用術(shù)語(yǔ)“抽象”來(lái)指出它們實(shí)際上是相同的,但它們的編碼不同),并且由于BMPString 是UniversalString 和UTF8String 意味著IA5String 是這些字符串類型的前128 個(gè)抽象字符。

好的,既然我們知道UTF8String 不是由BMPString 和UniversalString 字符組成,而只是對(duì)與BMPString 和UniversalString編碼的字符集完全相同的一組字符進(jìn)行編碼的不同方式,那么讓我們來(lái)談?wù)勊鼘?shí)際上是如何編碼的。

簡(jiǎn)而言之,如果一個(gè)字符的第一個(gè)字節(jié)的第一位是0,則意味著這個(gè)字符是一個(gè)字節(jié)長(zhǎng),如果你看一下字符映射你會(huì)看到這組字符(其中有128 個(gè),自然)是美國(guó) ASCII(即IA5String)。

如果字符的前3 位是110,則表示該字符長(zhǎng)2 個(gè)字節(jié),其值為110xxxxxx 10xxxxxx,其中x 是有效位,110中的11 表示字符長(zhǎng)2 個(gè)字節(jié)。

如果字符的前4 位是1110,則表示該字符長(zhǎng)3 個(gè)字節(jié),其值為1110xxxx 10xxxxxx 10xxxxxx,其中x 是有效位,1110中的111 表示該字符長(zhǎng)3 個(gè)字節(jié)。

如果一個(gè)字符的前5 位是11110,則表示該字符長(zhǎng)4 個(gè)字節(jié),其值為11110xxx 10xxxxxx 10xxxxxx10xxxxxx,其中X 是有效位,11110中的1111 表示該字符長(zhǎng)4 個(gè)字節(jié)。

如果字符的前6 位是111110,則表示該字符長(zhǎng)5 個(gè)字節(jié),其值為111110xx 10xxxxxx 10xxxxxx10xxxxxx 10xxxxxx,其中X 是有效位,111110中的11111 表示該字符長(zhǎng)5 個(gè)字節(jié)。

如果一個(gè)字符的前7 位是1111110,則表示該字符長(zhǎng)6 個(gè)字節(jié),其值為1111110x 10xxxxxx 10xxxxxx10xxxxxx 10xxxxxx 10xxxxxx,其中X 是有效位,1111110中的111111 表示該字符長(zhǎng)6 個(gè)字節(jié)。

3、擴(kuò)展加法的PER ALIGNED編碼的起始位應(yīng)該是八位字節(jié)對(duì)齊還是八位字節(jié)不對(duì)齊?

它應(yīng)該作為八位字節(jié)未對(duì)齊的位字段添加。

X.691(2008)的第19.7 和19.8節(jié)說(shuō),擴(kuò)展添加的編碼從位掩碼開始,該位掩碼的位指示特定擴(kuò)展的存在。反過(guò)來(lái),位掩碼以它的長(zhǎng)度為前綴,根據(jù)19.8,它被編碼為“通常較小的長(zhǎng)度”。

X.691(2008)的第11.9.3.4 節(jié)規(guī)定,“通常較小的長(zhǎng)度”的編碼從一個(gè)0 或1 的單個(gè)位位字段開始(如果擴(kuò)展的數(shù)量<=64 和1,則為0 除此以外)。

術(shù)語(yǔ)“位域”在X.691(2008) 的第3.7.3 節(jié)中進(jìn)行了解釋,隨后是澄清說(shuō)明:

注意:如果使用該術(shù)語(yǔ)后跟“對(duì)齊變體中的八位字節(jié)對(duì)齊”,這意味著在PER對(duì)齊變體的完整編碼中,位字段需要從八位字節(jié)邊界開始。

由于X.691(2008) 的第11.9.3.4節(jié)沒(méi)有明確提到單個(gè)位字段是八位字節(jié)對(duì)齊的,這意味著不需要八位字節(jié)邊界上的對(duì)齊。

請(qǐng)參閱X.691(2008) 的第11.1.4節(jié),了解如何在構(gòu)建完整編碼時(shí)使用位域,而不是如何使用八位字節(jié)對(duì)齊的位域。

4、有沒(méi)有辦法跳過(guò)解碼BER 中的SET/SEQUENCE中的一些不需要的字段?

是的,您可以這樣做,但只能在BER/DER/CER 中,而不是在PER/UPER 中,因?yàn)镻ER 的性質(zhì)。考慮 BER/DER/CER 中的以下ASN.1 語(yǔ)法:

基于上述語(yǔ)法,您可以對(duì)S1PDU 進(jìn)行編碼,但使用S2PDU 對(duì)其進(jìn)行解碼,其類型利用ASN.1可擴(kuò)展性。第一個(gè)“...”標(biāo)志著擴(kuò)展的開始,第二個(gè)標(biāo)志著它的結(jié)束。第二個(gè)“...”之后的字段d繼續(xù)擴(kuò)展根。在 BER/DER/CER中,解碼器將簡(jiǎn)單地跳過(guò)兩個(gè)擴(kuò)展標(biāo)記之間的所有字段并繼續(xù)使用字段d進(jìn)行解碼。

5、為什么零填充出現(xiàn)在短約束受限字符串類型的PER ALIGNED 編碼中?

讓我們考慮一下:

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

nN ::= "27"

和:

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

nN ::= "27"

X.691(2008)的第30.5.7條說(shuō):

30.5.7如果“aub”不等于“alb”或大于或等于64K,則應(yīng)調(diào)用11.9以添加前面的位字段通過(guò)一個(gè)長(zhǎng)度行列式,其中 n作為字符串中字符的計(jì)數(shù),長(zhǎng)度行列式為“alb”,上限為“aub”。如果“aub”乘以“b”大于或等于16,則應(yīng)將位字段添加為字段(對(duì)齊變體中的八位字節(jié)對(duì)齊),否則應(yīng)添加為非八位字節(jié)的位字段對(duì)齊。這樣就完成了本條的程序。

由于我們有SIZE(0..4),我們計(jì)算:

aub* b == 4 * 4 = 16

這使我們?cè)谏舷薮笥?時(shí)添加有問(wèn)題的填充。

編輯:黃飛

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 解碼器
    +關(guān)注

    關(guān)注

    9

    文章

    1165

    瀏覽量

    41825
  • 編碼器
    +關(guān)注

    關(guān)注

    45

    文章

    3786

    瀏覽量

    137580

原文標(biāo)題:OSS Nokalva:ASN.1問(wèn)答時(shí)間(3)

文章出處:【微信號(hào):哲想軟件,微信公眾號(hào):哲想軟件】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    單片機(jī)也可以輕松玩轉(zhuǎn)UTF-8碼和TTF字體了

    要讓智能設(shè)備支持各國(guó)不同的文字,首先得有支持全球文字的編碼集,時(shí)下最出名的要數(shù)UTF-8碼了。
    的頭像 發(fā)表于 11-23 17:18 ?6375次閱讀
    單片機(jī)也可以輕松玩轉(zhuǎn)<b class='flag-5'>UTF-8</b>碼和TTF字體了

    LABVIEW字符串轉(zhuǎn)換為UTF-8編碼字符串

    ,在這個(gè)庫(kù)中就包含了上述函數(shù)。庫(kù)的具體位置如下圖所示:這個(gè)庫(kù)中的許多VI都使用了一個(gè)內(nèi)置函數(shù)“"文本至UTF-8轉(zhuǎn)換”。該函數(shù)可以把LABVIEW字符串轉(zhuǎn)換為UTF-8編碼的字符串。簡(jiǎn)單轉(zhuǎn)換程序如下圖所示:
    發(fā)表于 06-06 15:16

    請(qǐng)教大神們,如何用labview創(chuàng)建一個(gè)UTF-8編碼的文本文件啊?

    請(qǐng)教大神們,如何用labview創(chuàng)建一個(gè)UTF-8編碼的文本文件???
    發(fā)表于 03-11 09:03

    怎么在MDB中將編碼設(shè)置為UTF-8

    是否有一種方法將編碼設(shè)置為MDB中的UTF-8。我在Ubuntu/PIC18/XC8編譯器上運(yùn)行我的測(cè)試代碼,預(yù)處理失敗了,在UTF-8中使用了一個(gè)無(wú)效的字節(jié)序列。一些外來(lái)字符的存在導(dǎo)
    發(fā)表于 10-25 16:51

    如何將文件編碼更改為UTF-8?

    HII正在對(duì)我的項(xiàng)目本地化,需要使用UTF-8編碼的字符串。我有一切工作代碼,但在編輯器中,字符串顯示,如果編碼的ANSI拉丁代碼頁(yè)。我了解到,在開始新項(xiàng)目時(shí)可以選擇UTF-8
    發(fā)表于 07-03 10:30

    linux系統(tǒng)編碼怎么修改成utf-8

    LANG="zh_CN.GBK" 修改為L(zhǎng)ANG="zh_CN.UTF-8".保存退出
    發(fā)表于 07-11 07:28

    VC++ 怎么改變文件的編碼UTF-8?

    da哥們,問(wèn)一下:VC++ 怎么改變文件的編碼UTF-8?謝謝。
    發(fā)表于 07-27 07:46

    如何將UTF-8轉(zhuǎn)換為GBK編碼

    概述我們?cè)趩纹瑱C(jī)開發(fā)中常會(huì)遇到需要將UTF-8轉(zhuǎn)換為GBK編碼的需求。在我們了解各種編碼格式的情況下可知,UFT-8不能直接轉(zhuǎn)成GBK,需中轉(zhuǎn)成unicode再轉(zhuǎn)換為gbk。而unic
    發(fā)表于 12-09 07:39

    RT-Thread Studio的GBK編碼版本如何改為UTF-8

    2.2.1工作區(qū)顯示 GBK 編碼,如何改為 UTF-8 呢?操作【窗口】–> 【首選項(xiàng)】在【搜索框】中,可以輸入【編碼】,這樣,找到 【常規(guī)】–> 【工作空間】【文本文件編碼】,改
    發(fā)表于 05-20 10:05

    請(qǐng)問(wèn)如何在TouchGFX的TextArea通配符中顯示UTF-8文本?

    是“UTF-8”,所以這是文件編碼。我嘗試使用 UART 作為調(diào)試控制臺(tái),它可以毫無(wú)問(wèn)題地輸出 UTF-8 文本。我猜 TouchGFX 的 Unicode 函數(shù)不希望 char* 字符串是
    發(fā)表于 12-09 06:11

    UNICODE,GBK,UTF-8區(qū)別

    Unicode編碼,簡(jiǎn)要解釋UCS、UTF、BMP、BOM等名詞。這是一篇程序員寫給程序員的趣味讀物
    發(fā)表于 03-28 10:28 ?2562次閱讀

    ascii和utf8的區(qū)別_ASCII編碼UTF-8的關(guān)系

    UTF-8是一種針對(duì)Unicode的可變長(zhǎng)度字符編碼,又稱萬(wàn)國(guó)碼。由Ken Thompson于1992年創(chuàng)建?,F(xiàn)在已經(jīng)標(biāo)準(zhǔn)化為RFC 3629。UTF-8用1到6個(gè)字節(jié)編碼Unicod
    的頭像 發(fā)表于 01-30 13:34 ?3.1w次閱讀
    ascii和<b class='flag-5'>utf8</b>的區(qū)別_ASCII<b class='flag-5'>編碼</b>與<b class='flag-5'>UTF-8</b>的關(guān)系

    MySQL中utf8utf8mb4有什么區(qū)別

    MySQL在5.5.3之后增加了這個(gè)utf8mb4的編碼,mb4就是most bytes 4的意思,專門用來(lái)兼容四字節(jié)的unicode。
    的頭像 發(fā)表于 04-12 19:21 ?1.3w次閱讀

    單片機(jī)中UTF-8如何轉(zhuǎn)換得到GBK編碼

    概述 我們?cè)趩纹瑱C(jī)開發(fā)中常會(huì)遇到需要將UTF-8轉(zhuǎn)換為GBK編碼的需求。在我們了解各種編碼格式的情況下可知,UFT-8不能直接轉(zhuǎn)成GBK,需中轉(zhuǎn)成unicode再轉(zhuǎn)換為gbk。而un
    發(fā)表于 11-26 10:51 ?19次下載
    單片機(jī)中<b class='flag-5'>UTF-8</b>如何轉(zhuǎn)換得到GBK<b class='flag-5'>編碼</b>

    Python字符編碼轉(zhuǎn)換

    -*- coding:utf- 8 -*-utf_8_a = '我愛(ài)中國(guó)' gbk_a = utf_8_a. decode ( 'utf-8
    的頭像 發(fā)表于 07-05 16:25 ?1420次閱讀
    Python字符<b class='flag-5'>編碼</b>轉(zhuǎn)換