以下是在国家/语言代码部分之前指定了这些神秘的3个字符的示例用户代理列表。
ES(espan。) http://www.webuseragents.com/ua/643853/opera-9-80-j2me-midp-opera-mini-4-2-14912-25-729-u-es-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-es-presto-2-8-119-version-11-10PT http://www.webuseragents.com/ua/874562/opera-9-80-j2me-midp-opera-mini-4-2-14912-28-4150-u-pt-presto-2-8-119-version-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-presto-2-8-119-version-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-u-en-presto-2-8-119-version-11-10
还有更多,但是我已经离开了它,在每个用户代理中,无法识别的字符总是相同的(那是):“”它将显示为ï»Vi或ï» ¿PT或es或en。
现在,它看起来像是一个外来词或代码,但它不应该。由于Microsoft列出了所有可能的用户代理国家/地区(地区)与语言(语言环境)引用,并且使用普通字符(a-z),很少使用数字(0-9)和破折号(连字符)和下划线。没有比这更能用于描述数百种语言环境和数百种方言(语言)。因此,这些区域中使用的区域和语言的整个组合可以使用ISO 639标准进行描述,该标准仅使用a-z之间的字符。
微软的官方列表虽然全面,但并未涵盖所有内容,但接近它:http://msdn.microsoft.com/en-us/library/cc233968.aspx
所以我通过使用Visual Studio 2012和方便的Asc()函数将符号转换为相关的字符代码来检查这3个字符,结果如下:
ï = character 239
» = character 187
¿ = character 191
现在,我真正需要知道的是,像这样的用户代理是合法的UA。我是否需要将它们扔进垃圾箱,或者将它们传递给它(不是出于任何特定目的,而是一般来说)。有没有人知道这种奇怪的东西或为什么它存在,它代表什么或什么? user-Agent规范特殊字符部分(在ISO中)没有引用它。
假设,如果我要编写一个程序来分析用户代理并将其合法性返回给用户,那么具有字符的用户代理会指示我返回什么?用户代理是合法(真)或非合法(假)......?
UPDATE / ADDITION:
我找到了另一个有类似问题的用户代理,它显示如下(注意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正在执行此操作,因为数据库字段类型我正在存储它in是nvarchar(MAX)
)。
我该怎么办?我应该以原始形式获取此数据并按“原样”传递,还是应该排除所有带有奇怪字符的项目?
我的意思是,例如,DÌFH©3是否代表了在中国制造和使用的真实产品名称?关于我应该去哪个方向的任何想法?
非常感谢所有人,阅读和任何预期的回应。
答案 0 :(得分:1)
该网站假设用户代理字符串编码为ISO-8859-1,但事实上它是UTF-8。
您所看到的是Unicode代码点U + FEFF(a.k.a。“BYTE ORDER MARK”)。当以UTF-8编码时,它由三个字节0xEF,0xBB,0xBF组成。当您假设这三个字节实际上是ISO-8859-1时,您可以将它们编码为
。
始终可以从UTF-8字符串中安全地删除字节顺序标记。对于其他编码方案(UCS-2,UTF-16等),它可能是解码器的有用提示,但同样,它没有其他目的或意义。
当您第一手处理UA字符串时,最好的办法是尝试将其解码为UTF-8,并将不在字母,数字,标记或符号类别中的所有内容解释为空格。< / p>