idnToUnicode 函式 (winnls.h)

將國際化功能變數名稱的 Punycode 形式 (IDN) 或其他國際化卷標轉換為一般 Unicode UTF-16 編碼語法。

謹慎 此函式會實作 RFC 3490:將應用程式中的域名國際化 (IDNA) 標準演算法,以進行 Unicode 的 Punycode 編碼。 此標準引進了一些安全性問題。 其中一個問題是,代表不同腳本中特定字元的字元可能類似或甚至相同。 例如,在許多字型中,斯拉夫小寫 A (“а”) 無法從拉丁小寫 A (“a”) 區分。 無法以可視化方式告訴 「example.com」 和 「exа mple.com」 是兩個不同的功能變數名稱,一個是名稱中有拉丁小寫 A,另一個則使用小寫字母 A。如需 IDN 相關安全性考慮的詳細資訊,請參閱 處理國際化功能變數名稱 (IDN)

 

語法

int IdnToUnicode(
  [in]            DWORD   dwFlags,
  [in]            LPCWSTR lpASCIICharStr,
  [in]            int     cchASCIIChar,
  [out, optional] LPWSTR  lpUnicodeCharStr,
  [in]            int     cchUnicodeChar
);

參數

[in] dwFlags

指定轉換選項的旗標。 如需詳細定義,請參閱IdnToAsciidwFlags 參數。

[in] lpASCIICharStr

字串的指標,表示IDN或其他國際化標籤的Punycode編碼方式。 此字串只能包含 ASCII 字元,而且可以包含 Punycode 編碼的 Unicode。 函式會將 Punycode 值譯碼為其 UTF-16 值。

[in] cchASCIIChar

lpASCIICharStr 所指示輸入字串中的字元計數。

[out, optional] lpUnicodeCharStr

接收一般 Unicode UTF-16 編碼的緩衝區指標,相當於輸入字串的 Punycode 值。 或者,如果 cchUnicodeChar 設定為 0,函式可以擷取此參數的 NULL。 在此情況下,函式會傳回這個緩衝區所需的大小。

[in] cchUnicodeChar

大小,以字元為單位,以字元為單位,以 lpUnicodeCharStr 表示的緩衝區。 應用程式可以將大小設定為 0,以在 lpUnicodeCharStr 中擷取 NULL,並讓函式傳回所需的緩衝區大小。

傳回值

如果成功,會傳回 在 lpUnicodeCharStr 中擷取的字元數。 只有在輸入字串為 Null 終止時,擷取的字串才會以 Null 終止。

如果函式成功且 cchUnicodeChar 的值為 0,則函式會傳回所需的大小,以字元為單位,包括輸入緩衝區的終止 Null 字元。

如果函式不成功,函式會傳回 0。 若要取得擴充的錯誤資訊,應用程式可以呼叫 GetLastError,這可以傳回下列其中一個錯誤碼:

  • ERROR_INSUFFICIENT_BUFFER。 提供的緩衝區大小不夠大,或設定為 NULL 不正確。
  • ERROR_INVALID_FLAGS。 為旗標的值無效。
  • ERROR_INVALID_NAME。 為函式提供無效的名稱。 請注意,這個錯誤碼會攔截所有語法錯誤。
  • ERROR_INVALID_PARAMETER。 任何參數值都無效。
  • ERROR_NO_UNICODE_TRANSLATION。 在字串中找到無效的 Unicode。

備註

請參閱 IdnToAscii的。

規格需求

需求
最低支援的用戶端 Windows Vista [傳統型應用程式 |UWP 應用程式]
最低支援的伺服器 Windows Server 2008 [傳統型應用程式 |UWP 應用程式]
目標平台 Windows
標頭 winnls.h (包含 Windows.h)
程式庫 Normaliz.lib
Dll Normaliz.dll
可轉散發套件 Microsoft 國際化功能變數名稱 (IDN) WINDOWS XP SP2 和更新版本上的風險降低 API,或使用 SP1 的 Windows Server 2003

另請參閱

處理國際化域名 (IDN)

IdnToAscii

IdnToNameprepUnicode

國家語言支援

國家語言支援函式