gpt4 book ai didi

c# - 用户代理字符串中无法识别的字符 ("")?该怎么办?

转载 作者:可可西里 更新时间:2023-11-01 16:38:08 25 4
gpt4 key购买 nike

以下是示例用户代理列表,这些用户代理在国家/语言代码部分之前指定了这些神秘的 3 个字符。

http://www.webuseragents.com/ua/840966/opera-9-80-j2me-midp-opera-mini-4-2-14912-27-1251-u-vi-presto-2-8-119-version-11-10

ES(西类牙) 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-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-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

ZH(英语) 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 之间的字符。

Microsoft 的官方列表在这里,虽然很全面,但并未涵盖所有内容,但接近于此:http://msdn.microsoft.com/en-us/library/cc233968.aspx

因此,我通过使用 Visual Studio 2012 和方便的 Asc() 函数将符号转换为相关字符代码来检查这 3 个字符,结果如下:

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

现在,我真正需要知道的是像这样的用户代理是否是合法的 UA。我需要把它们扔进垃圾桶,还是照原样传递(不是为了任何特定目的,只是一般而言)。有谁知道这种奇怪的事情或它为什么存在,它代表什么或其他什么?用户代理规范特殊字符部分(在 ISO 中)没有提及这一点。

假设地说,如果我要编写一个程序来分析用户代理并向用户返回其合法性,那么带有  字符的用户代理会指示我返回什么?用户代理是合法的 (True) 还是不合法的 (False)...?

更新/添加:

我发现另一个有类似问题的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 是否代表在中国制造和使用的真实产品名称?关于我应该去哪个方向有什么想法吗?

非常感谢大家的阅读和任何预期的回复。

最佳答案

网站假设此用户代理字符串编码为 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,并将不在字母、数字、标记或符号类别中的所有内容解释为空格。

关于c# - 用户代理字符串中无法识别的字符 ("")?该怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20060015/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com