Go 如何将此IDNA URL转换为Unicode?

Go 如何将此IDNA URL转换为Unicode?,go,Go,我想将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 := idn

我想将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.Пф

主程序包
进口(
“golang.org/x/net/idna”
“网络/网址”
)
func main(){
p、 e:=url.Parse(“https://xn---36-mddtcafmzdgfgpbxs0h7c.xn--p1ai")
如果e!=nil{
恐慌(e)
}
s、 e:=idna.ToUnicode(p.Host)
如果e!=nil{
恐慌(e)
}
println(s==“Пчччччччччччччччч
}

IDNA字符串由点分隔的“标签”组成。每个标签都可以编码(如果它以“xn--”开头),也可以不编码(如果它不编码)。您的字符串由两个标签组成,
https://xn---36-mddtcafmzdgfgpbxs0h7c
xn--p1ai
。只有第二个是IDNA编码的


只需处理URL中IDNA编码的部分(即主机名)。其他任何事情都是毫无意义的,是行不通的。

idna不是这样工作的。只需单独转换主机名。
其他任何东西都是毫无意义的,无法工作。
将URL部分粘贴到Chrome/Firefox浏览器时,URL部分会正确转换为unicode格式,所以它会这样做work@stkxchng浏览器不会在URL上IIDNA转换为ASCII,而是在URL的各个组件上。你真的应该试着理解这些东西是如何工作的。实际上,浏览器所做的正是我和史蒂文在他公认的答案中所说的。