RtlUnicodeStringToUTF8String 函数 (ntifs.h)

RtlUnicodeStringToUTF8String 将指定的 Unicode 字符串转换为 UTF-8 字符串。

语法

NTSYSAPI NTSTATUS RtlUnicodeStringToUTF8String(
  PUTF8_STRING     DestinationString,
  PCUNICODE_STRING SourceString,
  BOOLEAN          AllocateDestinationString
);

参数

DestinationString

指向放置转换后的输出 UTF-8 字符串的缓冲区的指针。 仅当 AllocateDestinationString 为 TRUE 时,才会设置 DestinationString-MaximumLength> 字段。

SourceString

指向要转换为 UTF-8 的 Unicode 字符串的指针。

AllocateDestinationString

布尔值。 如果设置为 TRUE,RtlUnicodeStringToUTF8String 将分配目标字符串的缓冲区空间。 此 API 仅分配 DestinationString-Buffer> 的存储。 如果 RtlUnicodeStringToUTF8String 执行缓冲区分配,则调用方必须使用 RtlFreeUTF8String 解除分配缓冲区。

返回值

转换成功时,此函数返回STATUS_SUCCESS。 可能的错误或警告代码包括:

代码 说明
STATUS_INVALID_PARAMETERX 错误:其中一个参数值无效。
STATUS_NO_MEMORY 错误: RtlUnicodeStringToUTF8String 无法分配缓冲区空间。
STATUS_BUFFER_OVERFLOW 警告:由于目标缓冲区中的空间不足,DestinationString-Buffer> 中转换的字符串被截断。
STATUS_SOME_NOT_MAPPED 警告:调用成功,但一个或多个输入字符无效,在转换为 UTF-8 之前已替换为 Unicode 替换字符 U+FFFD。

注解

仅当 Unicode 输入字符串以 null 结尾时,UTF-8 输出字符串才以 null 结尾。

RtlUnicodeStringToUTF8String 支持 Unicode 代理项对。 但是,不后跟尾随字值的代理项前导词值,或前面没有前导词值的尾随字值,不会被识别为有效的字符代码,并由 Unicode 替换字符 U+FFFD 替换。

RtlUnicodeStringToUTF8String 继续将输入字符串转换为输出字符串,直到到达源缓冲区的末尾或目标缓冲区的末尾(以先发生者为准)。 例程将输入字符串中的任何 null 字符转换为输出字符串中的 null 字符。 如果输入字符串包含终止 null 字符,但 null 字符不位于源缓冲区的末尾,则例程将继续超过终止 null 字符,直到到达可用缓冲区空间的末尾。

RtlUTF8StringToUnicodeString 例程将 UTF-8 字符串转换为 Unicode 字符串。

可以使用 RtlUnicodeStringToUTF8StringRtlUTF8StringToUnicodeString 例程在 Unicode 和 UTF-8 格式之间执行有效文本字符串的无损转换。 但是,具有任意数据值的字符串可能会违反编码代理项对的 Unicode 规则,并且输入字符串中无效值中包含的任何信息都将丢失,并且无法从生成的输出字符串中恢复。

要求

要求
最低受支持的客户端 Windows 10 版本 2004
标头 ntifs.h

另请参阅

RtlFreeUTF8String

RtlUTF8StringToUnicodeString