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

指向缓冲区的指针,该缓冲区接收与输入字符串的 Punycode 值等效的正常 Unicode UTF-16 编码。 或者,如果 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)
Library Normaliz.lib
DLL Normaliz.dll
可再发行组件 Microsoft 国际化域名 (IDN) 带 SP2 及更高版本 Windows XP 或 Windows Server 2003 SP1 的缓解 API

另请参阅

处理国际化域名 (IDN)

IdnToAscii

IdnToNameprepUnicode

国家语言支持

国家语言支持函数