鴻蒙OS IDN

2022-06-08 15:44 更新

IDN

java.lang.Object

|---java.net.IDN

public final class IDN
extends Object

提供在普通 Unicode 表示和 ASCII 兼容編碼 (ACE) 表示之間轉(zhuǎn)換國際化域名 (IDN) 的方法。 國際化域名可以使用整個 Unicode 范圍內(nèi)的字符,而傳統(tǒng)域名僅限于 ASCII 字符。 ACE 是一種僅使用 ASCII 字符的 Unicode 字符串編碼,可以與只理解傳統(tǒng)域名的軟件(例如域名系統(tǒng))一起使用。

國際化域名在 RFC 3490 中定義。RFC 3490 定義了兩種操作:ToASCII 和 ToUnicode。 這兩個操作使用 Nameprep 算法,它是 Stringprep 的一個配置文件,以及 Punycode 算法來來回轉(zhuǎn)換域名字符串。

上述轉(zhuǎn)換過程的行為可以通過各種標志進行調(diào)整:

  • 如果使用 ALLOW_UNASSIGNED 標志,則要轉(zhuǎn)換的域名字符串可以包含在 Unicode 3.2 中未分配的代碼點,這是 IDN 轉(zhuǎn)換所基于的 Unicode 版本。 如果未使用該標志,則將此類未分配代碼點的存在視為錯誤。
  • 如果使用 USE_STD3_ASCII_RULES 標志,則對照 RFC 1122 和 RFC 1123 檢查 ASCII 字符串。如果它們不符合要求,則會出錯。

這些標志可以邏輯或在一起。

安全考慮對于國際化域名支持很重要。 例如,英文域名可能是同形異義詞——通過替換非拉丁字母而惡意拼寫錯誤。 Unicode 技術(shù)報告 #36 討論了 IDN 支持的安全問題以及可能的解決方案。 應用程序有責任在使用國際域名時采取足夠的安全措施。

字段摘要

修飾符和類型 字段 描述
static int ALLOW_UNASSIGNED 允許處理未分配代碼點的標志
static int USE_STD3_ASCII_RULES 標記以打開對 STD-3 ASCII 規(guī)則的檢查

方法總結(jié)

修飾符和類型 方法 描述
static String toASCII(String input) 將字符串從 Unicode 轉(zhuǎn)換為 ASCII 兼容編碼 (ACE),由 RFC 3490 的 ToASCII 操作定義。
static String toASCII(String input, int flag) 將字符串從 Unicode 轉(zhuǎn)換為 ASCII 兼容編碼 (ACE),由 RFC 3490 的 ToASCII 操作定義。
static String toUnicode(String input) 將字符串從 ASCII 兼容編碼 (ACE) 轉(zhuǎn)換為 Unicode,由 RFC 3490 的 ToUnicode 操作定義。
static String toUnicode(String input, int flag) 將字符串從 ASCII 兼容編碼 (ACE) 轉(zhuǎn)換為 Unicode,由 RFC 3490 的 ToUnicode 操作定義。
從類 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

字段詳細信息

ALLOW_UNASSIGNED

public static final int ALLOW_UNASSIGNED

允許處理未分配代碼點的標志

USE_STD3_ASCII_RULES

public static final int USE_STD3_ASCII_RULES

標記以打開對 STD-3 ASCII 規(guī)則的檢查

方法詳情

toASCII

public static String toASCII(String input, int flag)

將字符串從 Unicode 轉(zhuǎn)換為 ASCII 兼容編碼 (ACE),由 RFC 3490 的 ToASCII 操作定義。

ToASCII 操作可能會失敗。 如果任何步驟失敗,ToASCII 就會失敗。 如果 ToASCII 操作失敗,將拋出 IllegalArgumentException。 在這種情況下,不應在國際化域名中使用輸入字符串。

標簽是域名的獨立部分。 RFC 3490 中定義的原始 ToASCII 操作僅對單個標簽進行操作。 該方法可以處理標簽和整個域名,假設(shè)域名中的標簽總是用點分隔。 以下字符被識別為點:\u002E(句號)、\u3002(表意句號)、\uFF0E(全角句號)和\uFF61(半角表意句號)。 如果將點用作標簽分隔符,則此方法還將在輸出翻譯字符串中將它們?nèi)扛臑?\u002E(句號)。

參數(shù):

參數(shù)名稱 參數(shù)描述
input 要處理的字符串
flag 進程標志; 可以是 0 或可能標志的任何邏輯或

返回:

翻譯后的字符串

Throws:

Throw名稱 Throw描述
IllegalArgumentException 如果輸入字符串不符合 RFC 3490 規(guī)范

toASCII

public static String toASCII(String input)

將字符串從 Unicode 轉(zhuǎn)換為 ASCII 兼容編碼 (ACE),由 RFC 3490 的 ToASCII 操作定義。

這種方便的方法就像通過調(diào)用兩個參數(shù)對應物一樣工作,如下所示:

toASCII(input, 0);

參數(shù):

參數(shù)名稱 參數(shù)描述
input 要處理的字符串

返回:

翻譯后的字符串

Throws:

Throw名稱 Throw描述
IllegalArgumentException 如果輸入字符串不符合 RFC 3490 規(guī)范

toUnicode

public static String toUnicode(String input, int flag)

將字符串從 ASCII 兼容編碼 (ACE) 轉(zhuǎn)換為 Unicode,由 RFC 3490 的 ToUnicode 操作定義。

ToUnicode 永遠不會失敗。 如果出現(xiàn)任何錯誤,輸入字符串將不加修改地返回。

標簽是域名的獨立部分。 RFC 3490 中定義的原始 ToUnicode 操作僅對單個標簽進行操作。 該方法可以處理標簽和整個域名,假設(shè)域名中的標簽總是用點分隔。 以下字符被識別為點:\u002E(句號)、\u3002(表意句號)、\uFF0E(全角句號)和\uFF61(半角表意句號)。

參數(shù):

參數(shù)名稱 參數(shù)描述
input 要處理的字符串
flag 進程標志; 可以是 0 或可能標志的任何邏輯或

返回:

翻譯后的字符串

toUnicode

public static String toUnicode(String input)

將字符串從 ASCII 兼容編碼 (ACE) 轉(zhuǎn)換為 Unicode,由 RFC 3490 的 ToUnicode 操作定義。

這種方便的方法就像通過調(diào)用兩個參數(shù)對應物一樣工作,如下所示:

toUnicode(input, 0);

參數(shù):

參數(shù)名稱 參數(shù)描述
input 要處理的字符串

返回:

翻譯后的字符串

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號