在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

UTF8String是如何編碼的?

西西 ? 來源:哲想軟件 ? 作者:cogitosoftware ? 2022-08-26 09:55 ? 次閱讀

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

這是編碼器或解碼器端ASN.1 語法中的拼寫錯誤導致的常見錯誤。省略空格字符通常很容易。例如假設在編碼器端 IA定義為:

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

但在解碼器方面:

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

帶有一個額外的空格字符“”。這導致值

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 個字節,其值為110xxxxxx 10xxxxxx,其中x 是有效位,110中的11 表示字符長2 個字節。

如果字符的前4 位是1110,則表示該字符長3 個字節,其值為1110xxxx 10xxxxxx 10xxxxxx,其中x 是有效位,1110中的111 表示該字符長3 個字節。

如果一個字符的前5 位是11110,則表示該字符長4 個字節,其值為11110xxx 10xxxxxx 10xxxxxx10xxxxxx,其中X 是有效位,11110中的1111 表示該字符長4 個字節。

如果字符的前6 位是111110,則表示該字符長5 個字節,其值為111110xx 10xxxxxx 10xxxxxx10xxxxxx 10xxxxxx,其中X 是有效位,111110中的11111 表示該字符長5 個字節。

如果一個字符的前7 位是1111110,則表示該字符長6 個字節,其值為1111110x 10xxxxxx 10xxxxxx10xxxxxx 10xxxxxx 10xxxxxx,其中X 是有效位,1111110中的111111 表示該字符長6 個字節。

3、擴展加法的PER ALIGNED編碼的起始位應該是八位字節對齊還是八位字節不對齊?

它應該作為八位字節未對齊的位字段添加。

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、為什么零填充出現在短約束受限字符串類型的PER ALIGNED 編碼中?

讓我們考慮一下:

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

nN ::= "27"

和:

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

nN ::= "27"

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

30.5.7如果“aub”不等于“alb”或大于或等于64K,則應調用11.9以添加前面的位字段通過一個長度行列式,其中 n作為字符串中字符的計數,長度行列式為“alb”,上限為“aub”。如果“aub”乘以“b”大于或等于16,則應將位字段添加為字段(對齊變體中的八位字節對齊),否則應添加為非八位字節的位字段對齊。這樣就完成了本條的程序。

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

aub* b == 4 * 4 = 16

這使我們在上限大于3時添加有問題的填充。

編輯:黃飛

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 解碼器
    +關注

    關注

    9

    文章

    1144

    瀏覽量

    40829
  • 編碼器
    +關注

    關注

    45

    文章

    3655

    瀏覽量

    134883

原文標題:OSS Nokalva:ASN.1問答時間(3)

文章出處:【微信號:哲想軟件,微信公眾號:哲想軟件】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    單片機也可以輕松玩轉UTF-8碼和TTF字體了

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

    LABVIEW字符串轉換為UTF-8編碼字符串

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

    請教大神們,如何用labview創建一個UTF-8編碼的文本文件啊?

    請教大神們,如何用labview創建一個UTF-8編碼的文本文件啊?
    發表于 03-11 09:03

    怎么在MDB中將編碼設置為UTF-8

    是否有一種方法將編碼設置為MDB中的UTF-8。我在Ubuntu/PIC18/XC8編譯器上運行我的測試代碼,預處理失敗了,在UTF-8中使用了一個無效的字節序列。一些外來字符的存在導
    發表于 10-25 16:51

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

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

    linux系統編碼怎么修改成utf-8

    LANG="zh_CN.GBK" 修改為LANG="zh_CN.UTF-8".保存退出
    發表于 07-11 07:28

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

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

    如何將UTF-8轉換為GBK編碼

    概述我們在單片機開發中常會遇到需要將UTF-8轉換為GBK編碼的需求。在我們了解各種編碼格式的情況下可知,UFT-8不能直接轉成GBK,需中轉成unicode再轉換為gbk。而unic
    發表于 12-09 07:39

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

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

    請問如何在TouchGFX的TextArea通配符中顯示UTF-8文本?

    是“UTF-8”,所以這是文件編碼。我嘗試使用 UART 作為調試控制臺,它可以毫無問題地輸出 UTF-8 文本。我猜 TouchGFX 的 Unicode 函數不希望 char* 字符串是
    發表于 12-09 06:11

    UNICODE,GBK,UTF-8區別

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

    ascii和utf8的區別_ASCII編碼UTF-8的關系

    UTF-8是一種針對Unicode的可變長度字符編碼,又稱萬國碼。由Ken Thompson于1992年創建。現在已經標準化為RFC 3629。UTF-8用1到6個字節編碼Unicod
    的頭像 發表于 01-30 13:34 ?3w次閱讀
    ascii和<b class='flag-5'>utf8</b>的區別_ASCII<b class='flag-5'>編碼</b>與<b class='flag-5'>UTF-8</b>的關系

    MySQL中utf8utf8mb4有什么區別

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

    單片機中UTF-8如何轉換得到GBK編碼

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

    Python字符編碼轉換

    -*- coding:utf- 8 -*-utf_8_a = '我愛中國' gbk_a = utf_8_a. decode ( 'utf-8
    的頭像 發表于 07-05 16:25 ?1115次閱讀
    Python字符<b class='flag-5'>編碼</b>轉換
    主站蜘蛛池模板: 又粗又爽又色男女乱淫播放男女| 亚洲综合色就色手机在线观看| 国产色拍| 狠狠色噜噜狠狠狠狠色综合久| 久久夜色精品| 日日夜夜噜| 精品女同同性视频很黄很色| 2021国产精品| 亚洲成a人伦理| 久草香蕉在线| 天天干天天综合| 91久娇草| 国产无限资源| aa毛片| 午夜8050| 又粗又爽又色男女乱淫播放男女| 在线国产播放| 日本综合在线| 中文字幕在线观看亚洲| 亚洲一二| 亚洲国产精品久久久久婷婷软件 | 欧美a区| 日日摸人人看97人人澡| 欧美高清免费一级在线| 国产一区二区精品| 午夜高清在线| 超级乱淫小黄文小说| 免费国产成人午夜私人影视| 狠狠干夜夜骑| 久久免| 91国内在线国内在线播放| 免费看色视频| 美女扒开尿口给男人看的让| 亚洲一卡二卡在线| 欧美资源在线观看| 免费激情网址| 成人网在线看| 免费看一级黄色录像| 69pao强力打造免费高清| 又粗又长又色又爽视频| 中文字幕区|