gpt4 book ai didi

java IDN 功能不可逆?

转载 作者:行者123 更新时间:2023-12-02 02:52:18 25 4
gpt4 key购买 nike

为什么有些 IDN 不可逆:

String domain = "aʼnċăwb7rňuħ.eu";
System.out.println(domain);
domain = IDN.toASCII(domain);
System.out.println(domain);
domain = IDN.toUnicode(domain);
System.out.println(domain);

它显示:

aʼnċăwb7rňuħ.eu
xn--anwb7ru-93a5e8ozmq2m.eu
aʼnċăwb7rňuħ.eu

如您所见,第二个字符已被分割!

谢谢

最佳答案

这是设计使然。据我所知,字符串中的第二个字符是\u0149 代码点。根据最新的Unicode编码表:

this character is deprecated and its use is strongly discouraged

Unicode 代码表显示已弃用的代码点相当于 \u02bc 后跟 \u006e

根据 javadocs,IDN.toASCII(String) 执行的第一步是使用 RFC 3491 stringprep/nameprep 算法来处理输入字符串中的字符。 RFC 摘要说:

This document describes how to prepare internationalized domain name (IDN) labels in order to increase the likelihood that name input and name comparison work in ways that make sense for typical users throughout the world. This profile of the stringprep protocol is used as part of a suite of on-the-wire protocols for internationalizing the Domain Name System (DNS).

(换句话说,stringprep 的目的是让创建看起来像一件事但含义不同的棘手域名变得更加困难。)

事实上,如果你深入下去,你会发现 \u0149 的 stringprep 表中规定的映射是 \u02bc \u006e ;即 Unicode 代码表中定义的等效项。

而且......这就是正在发生的事情。

<小时/>

摘要

  1. 您认为可以往返 IDN 的期望是没有根据的。
  2. 无论如何您都不应该使用该字符,因为它已被弃用。 (当然,在 IDN 中使用它是一个坏主意!)

关于java IDN 功能不可逆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43611583/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com