如何将此 IDNA URL 转换为 Unicode?

我想将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 网址粘贴到 Chrome 中时相同的结果:

https://природный-источник36.рф


aluckdog
浏览 131回答 2
2回答

拉风的咖菲猫

您只需要先解析 URL:package mainimport (   "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.рф")}https://golang.org/pkg/net/url#Parse

桃花长相依

IDNA字符串由由点“.”分隔的“标签”组成。每个标签都可以编码(如果它以“xn--”开头)或不编码(如果它不以“xn--”开头)。字符串由两个标签和 .只有第二个是IDNA编码的。https://xn---36-mddtcafmzdgfgpbxs0h7cxn--p1ai只需处理URL中经过IDNA编码的部分(即主机名)。其他任何事情都是荒谬的,行不通。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go