登录
首页 >  Golang >  Go问答

将这个 IDNA URL 转换为 Unicode 的步骤是什么?

来源:stackoverflow

时间:2024-03-23 10:30:33 290浏览 收藏

本文介绍了如何将国际化域名 (IDNA) ASCII URL 转换为 Unicode。它使用 Go 语言的 `idna` 软件包,该软件包可以将 IDNA 编码的 URL 转换为 Unicode。作者提供了代码示例,展示如何解析 URL 并仅对主机名部分进行 IDNA 转换。通过这种方法,可以将 IDNA ASCII URL 转换为与在浏览器中粘贴相同的结果。

问题内容

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


正确答案


您只需要先解析 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.рф")
}

https://golang.org/pkg/net/url#Parse

idna 字符串由用点“.”分隔的“标签”组成。每个标签可以被编码(如果它以“xn--”开头)或不被编码(如果不是)。您的字符串由两个标签组成:https://xn---36-mddtcafmzdgfgpbxs0h7cxn--p1ai。只有第二个是 idna 编码的。

只需处理 url 中 idna 编码的部分(即主机名)。其他任何事情都是无意义的,并且不起作用。

理论要掌握,实操不能落!以上关于《将这个 IDNA URL 转换为 Unicode 的步骤是什么?》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>