鴻蒙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)換國(guó)際化域名 (IDN) 的方法。 國(guó)際化域名可以使用整個(gè) Unicode 范圍內(nèi)的字符,而傳統(tǒng)域名僅限于 ASCII 字符。 ACE 是一種僅使用 ASCII 字符的 Unicode 字符串編碼,可以與只理解傳統(tǒng)域名的軟件(例如域名系統(tǒng))一起使用。

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

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

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

這些標(biāo)志可以邏輯或在一起。

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

字段摘要

修飾符和類型 字段 描述
static int ALLOW_UNASSIGNED 允許處理未分配代碼點(diǎn)的標(biāo)志
static int USE_STD3_ASCII_RULES 標(biāo)記以打開對(duì) 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

字段詳細(xì)信息

ALLOW_UNASSIGNED

public static final int ALLOW_UNASSIGNED

允許處理未分配代碼點(diǎn)的標(biāo)志

USE_STD3_ASCII_RULES

public static final int USE_STD3_ASCII_RULES

標(biāo)記以打開對(duì) STD-3 ASCII 規(guī)則的檢查

方法詳情

toASCII

public static String toASCII(String input, int flag)

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

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

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

參數(shù):

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

返回:

翻譯后的字符串

Throws:

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

toASCII

public static String toASCII(String input)

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

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

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 永遠(yuǎn)不會(huì)失敗。 如果出現(xiàn)任何錯(cuò)誤,輸入字符串將不加修改地返回。

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

參數(shù):

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

返回:

翻譯后的字符串

toUnicode

public static String toUnicode(String input)

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

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

toUnicode(input, 0);

參數(shù):

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

返回:

翻譯后的字符串

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)