ASN.1 обычно лучше всего обрабатывать как двоичные данные из get go, а кодирование строк, содержащихся в нем, было бы тем, что ключи для этих строк должны определяться. В резервном случае, когда вы не знаете, какую кодировку использовать, кодировка iso8859-1
является первым выбором, так как это специальный, который не делает ужасного искажения двоичных данных. (Это связано с тем, что он точно отображает байты в диапазоне 0-255 для символов в диапазоне U + 000000-U + 0000FF, который является как тривиальным, так и не убывающим.) Угадание кодирование в противном случае является трудным, иногда невозможным.
Я бы не хотел разбирать ASN.1 вручную. Используйте tcllib package for it. С обычными тегами, он может сделать большую часть работы за вас:
package require asn
set f [open "mydata.ber" "rb"]
set myData [read $f]
close $f
# ...
# Data being parsed is now in $myData variable
# I assume that we've reached a string in the parsing of it
# ...
asn::asnGetString myData myString
puts "String parsed was '$myString'"
Однако, я думаю, что любой человек, использующий его еще нужно понимать ASN.1 на логическом уровне.
ASCII - это подмножество UTF-8. Существует буквально нулевая разница, когда вы сравниваете ВСЕ символы в ASCII с одинаковыми символами в UTF-8. Разница заключается в расширенном ASCII, но расширенный ASCII не называется ASCII, потому что существует много вариантов. Там Windows-1252, есть латинский-1 и т. Д. Все они, как UTF-8, надмножество ASCII – slebetman