为了账号安全,请及时绑定邮箱和手机立即绑定

如何将此 IDNA URL 转换为 Unicode?

如何将此 IDNA URL 转换为 Unicode?

Go
aluckdog 2022-09-05 09:11:55
我想将IDNA ASCII URL翻译成Unicode。package mainimport (    "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.рф
查看完整描述

2 回答

?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

您只需要先解析 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


查看完整回答
反对 回复 2022-09-05
?
桃花长相依

TA贡献1860条经验 获得超8个赞

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

只需处理URL中经过IDNA编码的部分(即主机名)。其他任何事情都是荒谬的,行不通。


查看完整回答
反对 回复 2022-09-05
  • 2 回答
  • 0 关注
  • 129 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信