首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将这个IDNA URL翻译成Unicode?

如何将这个IDNA URL翻译成Unicode?
EN

Stack Overflow用户
提问于 2021-05-26 09:11:38
回答 2查看 282关注 0票数 0

我想把IDNA ASCII URL翻译成Unicode。

代码语言:javascript
复制
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.рф

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-26 14:02:08

您只需先解析URL:

代码语言:javascript
复制
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

票数 1
EN

Stack Overflow用户

发布于 2021-05-26 14:03:29

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

只需处理URL中那些IDNA编码的部分(即主机名)。其他的一切都是毫无意义的,是行不通的。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67701899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档