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

Python URL:二进制Blob、Unicode还是编码的Unicode字符串?,python,mysql,database,url,Python,Mysql,Database,Url,在本例中,我希望将URL存储在数据库MySQL中,并用Python进行处理。虽然数据库和编程语言可能与我的问题无关 在我的设置中,查询数据库中的文本字段时,我会收到unicode字符串。但是URL实际上是文本吗?从unicode编码和解码到unicode是应该对URL执行的操作吗?还是让数据库中的列成为二进制blob更好 那么,你如何处理这个问题呢 澄清: 这个问题不是关于用百分比表示法编码非ASCII字符。unicode表示文本,字节字符串表示将文本编码为字节序列的方法。在3.0之前的Pyth

在本例中,我希望将URL存储在数据库MySQL中,并用Python进行处理。虽然数据库和编程语言可能与我的问题无关

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

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

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

关于这个问题:但是URL实际上是文本吗

这取决于上下文,在某些语言或库中,例如java,我不确定python,URL可能在内部表示为对象。但是,URL始终具有定义良好的文本表示形式。因此,存储文本表示比存储当前选择的语言所使用的内部表示更具可移植性

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

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


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

相关答案见第节 2.1 URI和非ASCII字符

URI和字符之间的关系一直是 不属于US-ASCII的字符的混淆。描述 在关系中,区分字符是很有用的 作为一个可区分的语义实体和一个8位字节 字节有两种映射,一种是从URI字符到八位字节的映射,另一种是 从八位字节到原始字符的第二个字符:

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

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


请注意,Unicode Web地址也有一个标准,即IRI国际化资源标识符

在Java中构造URL对象时,是否传递字符串?我的Java有点生疏,但我认为你没有太多的选择?RFC2396更新:18081738。此信息基于URI的旧定义。不是当前的定义。我认为使用unicode/TEXT的URI是一个很好的选择,因为它最好地代表人类可读的文本,并且只在实际需要时将其转换为字节序列。四年前RFC 2396已经被RFC 3986取代。我也发现了这个。不过,我在3986中找不到更好的措辞。