2015-03-08 3 views
1

Я работаю над созданием парсера ASN.1 на языке C (с использованием документа спецификации Ericsson ASN1). Я хочу декодировать строковый тип UTF-8, но я не могу найти информацию об этом в Интернете, а документ, который я использую, подробно не описывает строку UTF-8. Может ли кто-нибудь предоставить мне код или объяснить, как его декодировать.ASN1 UTF-8 string Декодирование

Я новичок в ASN.1.

+1

http://en.wikipedia.org/wiki/UTF-8 описывает, как UTF-8 кодирует символы и даже имеет пример кода в C. – user3386109

+0

Я полагаю, что этот вопрос касается декодирования ASN.1 'UTF8String' последовательность в массив байтов UTF-8, в отличие от перехода от этих байтов к строке Unicode (т. е. тег 'utf8-decode' не совсем подходит). Можете ли вы это подтвердить? (и если да, возможно, уточните в вопросе) –

+0

почему я получил -2 рейтинга? что не так с вопросом? – user3148326

ответ

8

Если вы пытаетесь разобрать ASN. 1, то отличный вводный ресурс - Kaliski's ‘Layman’s Guide’ (доступен в разных местах в Интернете, в формате HTML и PDF). Однако в этом документе нет упоминается тип UTF8String.

Дополнительная информация, которую вы должны знать, что UTF8String имеет tag 12 (десятичное или 0c в шестнадцатеричном виде), и что он закодирован в виде последовательности байтов, представляющих строку в кодировке UTF-8.

Таким образом, строка «Здравствуй» будет кодироваться как

0c 06 48 65 6c 6c c3 b3 

(я предполагаю, кстати, что «Ericsson спецификации ASN1 документ» обсуждает стандарт ASN.1, а не какой-то вариант.)

+2

Одна из неутешительных вещей об одном коммерческих инструментов ASN.1, которые я использовал, заключается в том, что он не проверяет, что строка UTF8, кодируемая/декодированная, действительно действительна UTF8. UTF8String просто рассматривается как еще одна OCTET STRING, которая может представлять любую старую строку байтов. UTF8 имеет правила относительно того, какие байты следуют за тем, поэтому некоторые байтовые комбинации недействительны. Было бы хорошо, если бы компиляторы ASN.1 добавили проверки для этого так же, как они проверяли любое другое ограничение по размеру или размеру, указанное в схеме ASN.1. Это добавит еще один уровень встроенной проверки содержимого. – bazza

+0

(закончилось пространство комментариев). То же самое относится к другим типам строк, таким как IA5String и т. Д. – bazza

+0

Обратите внимание, что при длине кодированной строки> 127 для построения байтов, представляющих эту длину, используются следующие правила: https://msdn.microsoft.com /en-us/library/windows/desktop/bb648641(v=vs.85).aspx – Tails

-1

Полный UTF-8 описание, что позволяет писать кодер и декодер суммированы в таблице доступных на странице Википедии:

http://en.wikipedia.org/wiki/UTF-8#Description

+5

-1 Это почти ничего сделать это. Любой может использовать Google для спецификации UTF-8. Вопрос в том, как эти строки обрабатываются/кодируются в [ASN.1] (https://en.wikipedia.org/wiki/Abstract_Syntax_Notation_One) – Tersosauros