我希望将URL存储在数据库中(在本例中为MySQL)并在Python中处理它。虽然数据库和编程语言可能与我的问题无关。
在我的设置中,我在查询数据库中的文本字段时收到unicode字符串。但URL实际上是文本吗?编码和解码是unicode应该对URL进行的操作吗?或者,最好是使数据库中的列成为二进制blob?
那么,你如何处理这个问题?
澄清: 此问题与使用百分比符号对非ASCII字符进行urlencoding有关。这是关于unicode表示文本和字节字符串表示将此文本编码为字节序列的方式。在Python(3.0之前)中,这种区别在于unicode和str类型。在MySQL中,它是TEXT到BLOBS。因此概念似乎在编程语言和数据库之间对应。但是,在这个方案中处理URL的最佳方法是什么?
答案 0 :(得分:3)
相关答案可在RFC 2396部分找到 2.1 URI和非ASCII字符
URI和字符之间的关系是其中的一个来源 对于不属于US-ASCII的字符的混淆。来描述 关系,区分“性格”是有用的 (作为可区分的语义实体)和“八位字节”(8位 字节)。有两个映射,一个从URI字符到八位字节,和 从八位字节到原始字符的第二个:
URI字符序列 - >八位字节序列 - >原始字符序列
URI表示为字符序列,而不是序列 八位字节这是因为URI可以通过这种方式“运输” 不是通过计算机网络,例如,打印在纸上,阅读 收音机等。
答案 1 :(得分:1)
在问题上:“但网址实际上是文字吗?”
这取决于上下文,在某些语言或库中(例如java,我不确定python),URL可以在内部表示为对象。但是,URL始终具有明确定义的文本表示。因此,存储文本表示比存储当前使用的语言所使用的内部表示要便携得多。
URL语法和语义被很多标准,建议和实现所涵盖,但我认为解析和构建正确URL的最权威来源是RFC 2396。
关于unicode的问题,第2.1节涉及非ascii字符。
(编辑:更改rfc-reference到最新版本,谢谢S.Lott)
答案 2 :(得分:1)
请注意,还有一个Unicode Web地址标准,IRI(国际化资源标识符)。 RFC 3987