关于百度搜索的链接
本帖最后由 歌者文明清理员 于 2023-4-14 20:42 编辑1. 在网址上显示的是https://www.baidu.com/s?wd=鱼C,为什么复制就变成了https://www.baidu.com/s?wd=%E9%B1%BCC?
2. 这是啥意思,给张表?
而且直接https://www.baidu.com/s?wd=鱼C也行,为什么复制又变成了https://www.baidu.com/s?wd=%D3%E3C? 在url上的非ascii字符都会被url编码,
>>> '鱼'.encode()
b'\xe9\xb1\xbc'
>>>
看出来没,实际上就是把 \x 换成了 %
也可以用以下方式
>>> from urllib.parse import quote
>>> quote('鱼')
'%E9%B1%BC'
>>> 当我们在网址中输入中文字符时,浏览器会将这些字符进行编码,即将其转换成符合 URL 规范的字符,比如 %E9%B1%BCC 就是 鱼C 的 URL 编码。URL 编码的目的是为了保证在因某种原因而需要特殊处理的情况下,这些字符能够被正确地传递和解析。
下面是一张常见字符的 URL 编码表:
字符 ASCII 码 URL 编码
空格 32 %20
! 33 %21
" 34 %22
# 35 %23
$ 36 %24
% 37 %25
& 38 %26
' 39 %27
( 40 %28
) 41 %29
* 42 %2A
+ 43 %2B
, 44 %2C
- 45 %2D
. 46 %2E
/ 47 %2F
: 58 %3A
; 59 %3B
< 60 %3C
= 61 %3D
> 62 %3E
? 63 %3F
@ 64 %40
[ 91 %5B
\ 92 %5C
] 93 %5D
^ 94 %5E
_ 95 %5F
` 96 %60
{ 123 %7B
| 124 %7C
} 125 %7D
~ 126 %7E
URL 编码表中,可以看到将常见的符号都映射成了一些特殊的字符序列,在 URL 中使用这些特殊的字符序列代替原始的字符,就可以避免一些转义问题。对于中文等非 ASCII 字符,则会将其转换成 %xx 类似的形式进行表示。
from urllib.parse import quote
s = "你好,世界!"
urlencode = quote(s)
print(urlencode) # %E4%BD%A0%E5%A5%BD%EF%BC%8C%E4%B8%96%E7%95%8C%EF%BC%81
@liuhongrun2022 @isdkz 请回答:
而且直接https://www.baidu.com/s?wd=鱼C也行,为什么复制又变成了https://www.baidu.com/s?wd=%D3%E3C? 本帖最后由 liuhongrun2022 于 2023-4-14 21:20 编辑
歌者文明清理员 发表于 2023-4-14 21:17
@liuhongrun2022 @isdkz 请回答:
这是因为浏览器在发送请求时,会将 URL 中的非 ASCII 字符进行 URL 编码,以保证它们能够被正确地传递和解析。在你手动输入中文字符时,浏览器会自动将它们进行编码;而当你复制粘贴一个 URL 时,浏览器会将其中的非 ASCII 字符自动进行编码,以避免出现一些解析错误。
例如,在你手动输入 鱼C 这个关键词时,它会被编码成 %E9%B1%BCC;而当你复制粘贴 https://www.baidu.com/s?wd=鱼C 这个 URL 时,浏览器会将其中的 鱼C 自动进行编码,变成了 %E9%B1%BCC。这两种形式在实际情况下都是等价的,可以被正确地解析。
[*]当你在浏览器的地址栏看到这个链接:https://www.baidu.com/s?wd=鱼C,实际上浏览器内部已经对非ASCII字符(例如汉字)进行了编码。这种编码称为URL编码(又称百分号编码)。当你复制链接时,你得到的是经过URL编码的版本,即:https://www.baidu.com/s?wd=%E9%B1%BCC。
[*]鱼C这两个字在URL编码后,变成了“%E9%B1%BCC”。每个汉字都会被替换成一个或多个以百分号(%)开头的字符序列。这里,“%E9%B1%BC”代表“鱼”这个汉字。你提到的另一个编码后的链接“https://www.baidu.com/s?wd=%D3%E3C”中,“%D3%E3”代表另一个汉字,可能是由于不同的编码方式导致的差异。
为什么从导航栏复制的链接中文会变成URL编码?
这是因为URL需要遵循一定的格式,以便在全球范围内进行通信。在URL中,某些字符具有特殊含义,如问号(?)用于表示查询字符串的开始,井号(#)用于表示锚点等。因此,为了避免混淆和解析错误,需要对URL中的特殊字符和非ASCII字符进行编码。
URL编码是一种将特殊字符和非ASCII字符转换为可在互联网上安全传输的格式的方法。它使用百分号(%)加上两个十六进制数字来表示一个字符。这样一来,即使在不同的计算机系统、浏览器或国家之间传输,URL仍然可以被正确解析和访问。
页:
[1]