代码之家  ›  专栏  ›  技术社区  ›  unbeknown

URLs:二进制Blob、Unicode还是编码的Unicode字符串?

  •  2
  • unbeknown  · 技术社区  · 17 年前

    我希望将URL存储在数据库(本例中为MySQL)中,并用Python处理它。尽管数据库和编程语言可能与我的问题无关。

    在我的设置中,查询数据库中的文本字段时,我会收到unicode字符串。但是URL真的是文本吗?从unicode进行编码和解码是应该对URL进行的操作吗?还是最好将数据库中的列设置为二进制blob?

    那么,你是如何处理这个问题的呢?

    澄清: 这个问题不是关于用百分比表示法对非ASCII字符进行url编码。这是关于unicode表示文本和字节字符串表示将此文本编码为字节序列的方式的区别。在Python(3.0之前)中,这种区别是unicode和str类型之间的区别。在MySQL中,它是文本到博客。因此,这些概念似乎在编程语言和数据库之间是对应的。但是,在此方案中处理URL的最佳方法是什么?

    3 回复  |  直到 17 年前
        1
  •  3
  •   MSalters    17 年前

    相关答案见 RFC 2396 ,节 2.1 URI和非ASCII字符


    URI和字符之间的关系一直是 对于非US-ASCII字符的混淆。描述 这种关系,区分“性格”是有用的 (作为一个可区分的语义实体)和“八位字节”(一个8位字节) 字节)。有两种映射,一种是从URI字符到八位字节,另一种是 第二个从八位字节到原始字符:

    URI字符序列->八位字节序列>原始字符序列

    URI表示为字符序列,而不是序列 八位字节。这是因为URI可能通过以下方式“传输” 不是通过计算机网络,例如打印在纸上、阅读 收音机等。


        2
  •  1
  •   bortzmeyer    17 年前

    请注意,还有一个Unicode网址标准,IRI(国际化资源标识符)。 RFC 3987

        3
  •  1
  •   Rolf Rander    17 年前

    关于这个问题:“但是URL真的是文本吗?”

    这取决于上下文,在某些语言或库中(例如java,我不确定python),URL可能在内部表示为对象。然而,URL总是有一个定义良好的文本表示。因此,存储文本表示比存储当前所选语言所使用的内部表示要便携得多。

    URL语法和语义包含在相当多的标准、建议和实现中,但我认为解析和构建正确URL的最权威来源是 RFC 2396 .

    关于unicode的问题,第2.1节涉及非ascii字符。

    (编辑:将rfc参考更改为最新版本,谢谢S.Lott)