歌者文明清理员 发表于 2023-4-14 20:40:50

关于百度搜索的链接

本帖最后由 歌者文明清理员 于 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?

isdkz 发表于 2023-4-14 20:54:03

在url上的非ascii字符都会被url编码,

>>> '鱼'.encode()
b'\xe9\xb1\xbc'
>>>

看出来没,实际上就是把 \x 换成了 %

也可以用以下方式

>>> from urllib.parse import quote
>>> quote('鱼')
'%E9%B1%BC'
>>>

liuhongrun2022 发表于 2023-4-14 21:03:27

当我们在网址中输入中文字符时,浏览器会将这些字符进行编码,即将其转换成符合 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

歌者文明清理员 发表于 2023-4-14 21:17:27

@liuhongrun2022 @isdkz 请回答:
而且直接https://www.baidu.com/s?wd=鱼C也行,为什么复制又变成了https://www.baidu.com/s?wd=%D3%E3C?

liuhongrun2022 发表于 2023-4-14 21:19:12

本帖最后由 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。这两种形式在实际情况下都是等价的,可以被正确地解析。

isdkz 发表于 2023-4-14 21:51:50


[*]当你在浏览器的地址栏看到这个链接: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]
查看完整版本: 关于百度搜索的链接