【发布时间】:2012-04-30 13:45:20
【问题描述】:
我维护的一个应用程序使用“latin1”字符集将从网络日志中提取的用户代理加载到 MySQL 表列中。有时,它无法加载如下所示的用户代理:
Mozilla/5.0 (Iâ?; CPU iPhone OS 5_0_1 like Mac OS X) AppleWebKit/534.46 (KHTML^C like Gecko) Version
我怀疑它在 Iâ? 上窒息。我正在努力弄清楚是否应该支持它,或者它是否是上游日志系统引入的损坏。这是 HTTP 标头中的合法用户代理吗?
【问题讨论】:
-
HTTP 规范早于 Unicode。我确定我看到一些建议说要输出 ASCII,但要接受 UTF-8。但我不记得我在哪里看到的,这就是为什么这是评论,而不是答案。
-
@TRiG:听起来像是Robustness principle 的特定实例。
-
一般来说,尝试将任意数据存储为 Latin-1 可能是个坏主意,除非您可以保证您只会获得适合 Latin-1 字符集的输入。为什么不使用 UTF-8?
-
@eggyal。是的。我不知道我在哪里看到了这个特别的建议,但它肯定符合 Postel 定律。我敢打赌它运作良好。
-
@Wooble 如果标准只指定ASCII,我认为按照标准设计一个存储这些值的系统是合理的。不过,看来我还有消毒工作要做。
标签: mysql http user-agent