我想将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
桃花长相依
TA贡献1860条经验 获得超8个赞
IDNA字符串由由点“.”分隔的“标签”组成。每个标签都可以编码(如果它以“xn--”开头)或不编码(如果它不以“xn--”开头)。字符串由两个标签和 .只有第二个是IDNA编码的。https://xn---36-mddtcafmzdgfgpbxs0h7c
xn--p1ai
只需处理URL中经过IDNA编码的部分(即主机名)。其他任何事情都是荒谬的,行不通。
- 2 回答
- 0 关注
- 129 浏览
添加回答
举报
0/150
提交
取消