Нераспознанные символы ("ï" ¿") в строке агента пользователя? Что делать?

Вот список примеров User Agents, у которых есть эти загадочные 3 персонажа, назначенные непосредственно перед разделом Страна/Язык.

Vi http://www.webuseragents.com/ua/840966/opera-9-80-j2me-midp-opera-mini-4-2-14912-27-1251-u-vi-presto-2-8-119 -версия-11-10

ES (espan.) Http://www.webuseragents.com/ua/643853/opera-9-80-j2me-midp-opera-mini-4-2-14912-25-729-ues-presto-2 -5-25-version-10-54 http://www.webuseragents.com/ua/884994/opera-9-80-j2me-midp-opera-mini-4-2-14912-29-3134-u- эс-гоп-2-8-119-версия-11-10

PT http://www.webuseragents.com/ua/874562/opera-9-80-j2me-midp-opera-mini-4-2-14912-28-4150-u-pt-presto-2-8-119 -версия-11-10 http://www.webuseragents.com/ua/961801/opera-9-80-j2me-midp-opera-mini-4-2-14912-30-3389-u-pt-presto- 2-8-119-version-11-10 http://www.webuseragents.com/ua/1029731/opera-9-80-j2me-midp-opera-mini-4-2-14912-32-952-u -pt-гоп-2-8-119-версия-11-10

EN (английский) http://www.webuseragents.com/ua/911065/opera-9-80-j2me-midp-opera-mini-4-2-14912-29-3417-u-en-presto-2- 8-119-version-11-10 http://www.webuseragents.com/ua/954938/opera-9-80-j2me-midp-opera-mini-4-2-14912-30-3341-uen -presto-2-8-119-версия-11-10

Существует еще больше, но я оставил его в этом случае, в каждом пользовательском агенте непризнанные символы всегда одинаковы (то есть): "ï" ¿", и он будет отображаться как ï" ¿Vi или ï "¿PT или ï "¿es или ï" ¿en.

Теперь это может показаться иностранным словом или кодом, но этого не должно быть. Поскольку все возможные ссылки на страну (регион) и язык (локаль) указаны в Microsoft и выполняются с нормальными символами (az), редко номерами (0-9) и тире (дефис) и подчеркиваниями. Ничто больше, чем это используется для описания сотен локалей и сотен диалектов (языков). Таким образом, вся комбинация региона и языков, используемых в этих регионах, описывается с использованием стандарта ISO 639, который использует символы в диапазоне от az.

Официальный список Microsoft здесь, хотя и всеобъемлющий, не охватывает их всех, но приближается к нему: http://msdn.microsoft.com/en-us/library/cc233968.aspx

Поэтому я рассмотрел эти 3 символа, превратив символы в соответствующие коды символов, используя Visual Studio 2012 и удобную функцию Asc(), вот как это получилось:

ï = character 239
» = character 187
¿ = character 191

Теперь, что мне действительно нужно знать, если пользовательские агенты, подобные этому, являются законными UA. Нужно ли мне бросать их в корзину или передавать их как это (не для какой-либо конкретной цели, а, как правило, вообще). Кто-нибудь знает что-нибудь об этой странности или о том, почему она существует, что она там представляет или что-то еще? В разделе специальных символов пользовательских агентов (в ISO) ссылка на это отсутствует.

Гипотетически говоря, если бы я должен был написать программу, которая проанализировала User Agent и вернула бы пользователю ее законность, что бы Агент User с символами ï "¿диктует, что я возвращаюсь? Пользовательский агент Legit (True) или Not Legit (False)...?

UPDATE/Сложение:

Я нашел другого User Agent с аналогичными проблемами, он отображается следующим образом (обратите внимание на часть сразу после JUC):

JUC (DÌFH©3;U; 2.3.5; zh-cn; HTC_Explorer_A310e; 320*480)

Однако в моем текстовом потоке я вижу это как " D?FH?3 ", поэтому у меня есть все эти вопросительные знаки, которые заменяют оригинальные странные символы.

Я использую подпрограмму System.Net.WebClient.DownloadData, чтобы получить эти данные, и я предполагаю, что происходит конверсия (если LINK To Entity не делает этого, поскольку тип поля базы данных, в котором я храню его, является nvarchar(MAX)).

Что мне делать? Должен ли я получить эти данные в оригинальной форме и передать ее "как есть", или я должен просто исключить все элементы со странными символами?

Я имею в виду, например, DÌFH © 3 представляет собой реальное название продукта, сделанное и используемое в Китае? Любые идеи о том, куда мне идти?

Большое вам спасибо за чтение и за любой ожидаемый ответ.

1 ответ

На веб-сайте предполагается, что эта строка пользовательского агента была закодирована как ISO-8859-1, но на самом деле это был UTF-8.

Вы видите код Unicode U + FEFF (он же " BYTE ORDER MARK "). При кодировании в UTF-8 он состоял из трех байтов 0xEF, 0xBB, 0xBF. Когда вы принимаете эти три байта на самом деле ISO-8859-1, вы кодируете их как ï"¿.

Знак порядка байтов всегда можно безопасно удалить из строк UTF-8. Для других схем кодирования (UCS-2, UTF-16 и т.д.) Это может быть полезным советом для декодера, но опять же, у него нет другой цели или смысла.

Когда вы имеете дело с цепочками UA из первых рук, лучше всего попытаться декодировать его как UTF-8 и интерпретировать все, что не относится к категории Letter, Number, Mark или Symbol как пробелы.

licensed under cc by-sa 3.0 with attribution.