我想把IDNA ASCII URL翻译成Unicode。
package main
import (
"golang.org/x/net/idna"
"log"
)
func main() {
input := "https://xn---36-mddtcafmzdgfgpbxs0h7c.xn--p1ai"
idnaProfile := idna.New()
output, err := idnaProfile.ToUnicode(input)
if err != nil {
log.Fatal(err)
}
log.Printf("%s", output)
}输出是:https://xn---36-mddtcafmzdgfgpbxs0h7c.рф
看起来IDNA包只转换TLD。有什么选项可以转换完整的URL吗?
当我将ASCII URL粘贴到Chrome中时,我需要得到相同的结果:
https://природный-источник36.рф
发布于 2021-05-26 14:02:08
您只需先解析URL:
package main
import (
"golang.org/x/net/idna"
"net/url"
)
func main() {
p, e := url.Parse("https://xn---36-mddtcafmzdgfgpbxs0h7c.xn--p1ai")
if e != nil {
panic(e)
}
s, e := idna.ToUnicode(p.Host)
if e != nil {
panic(e)
}
println(s == "природный-источник36.рф")
}发布于 2021-05-26 14:03:29
IDNA字符串由由点分隔的“标签”组成。“每个标签都可以编码(如果它以“xn--”开头)或不编码(如果没有)。您的字符串由两个标签组成,https://xn---36-mddtcafmzdgfgpbxs0h7c和xn--p1ai。只有第二个是IDNA编码的。
只需处理URL中那些IDNA编码的部分(即主机名)。其他的一切都是毫无意义的,是行不通的。
https://stackoverflow.com/questions/67701899
复制相似问题