Função RtlUnicodeToUTF8N (ntifs.h)
A rotina rtlUnicodeToUTF8N
Sintaxe
NTSYSAPI NTSTATUS RtlUnicodeToUTF8N(
[out] PCHAR UTF8StringDestination,
[in] ULONG UTF8StringMaxByteCount,
[out] PULONG UTF8StringActualByteCount,
[in] PCWCH UnicodeStringSource,
[in] ULONG UnicodeStringByteCount
);
Parâmetros
[out] UTF8StringDestination
Um ponteiro para um buffer de destino alocado pelo chamador no qual a rotina grava a cadeia de caracteres de saída UTF-8. Se esse parâmetro for NULL, a rotina gravará o tamanho necessário do buffer de saída em *UTF8StringActualByteCount.
[in] UTF8StringMaxByteCount
Especifica o número máximo de bytes que a rotina pode gravar no buffer para o qual UTF8StringDestination aponta. Se UTF8StringDestination = NULL, defina UTF8StringMaxByteCount = 0.
[out] UTF8StringActualByteCount
Um ponteiro para um local no qual a rotina grava o número real de bytes que ele gravou no buffer para o qual UTF8StringDestination aponta. Se UTF8StringDestination não forNULL, essa contagem nunca excederá o valor de UTF8StringMaxByteCount. Se UTF8StringDestination for NULL, essa contagem será o número de bytes necessários para conter toda a cadeia de caracteres de saída.
[in] UnicodeStringSource
Um ponteiro para a cadeia de caracteres de origem Unicode.
[in] UnicodeStringByteCount
Especifica o número de bytes na cadeia de caracteres de origem Unicode à qual o parâmetro UnicodeStringSource aponta.
Valor de retorno
RtlUnicodeToUTF8N retornará STATUS_SUCCESS se a chamada for bem-sucedida e todos os códigos de caractere Unicode na cadeia de caracteres de entrada forem convertidos nos códigos de caractere UTF-8 correspondentes na cadeia de caracteres de saída. Ele retornará STATUS_SOME_NOT_MAPPED se a chamada for bem-sucedida, mas um ou mais caracteres de entrada forem inválidos e forem substituídos pelo caractere de substituição Unicode, U+FFFD, antes de serem convertidos em UTF-8. Os valores de retorno de erro possíveis incluem os seguintes códigos de erro:
Código de retorno | Descrição |
---|---|
|
O parâmetro UTF8StringMaxByteCount especifica um tamanho de buffer muito pequeno para conter toda a cadeia de caracteres de saída. |
|
Os parâmetros UTF8StringDestination e UTF8StringActualByteCount são ambos NULL. |
|
O parâmetro UnicodeStringSource é NULL. |
|
UnicodeStringByteCount não é um múltiplo inteiro de tamanhos de(WCHAR). |
Observações
A cadeia de caracteres de saída UTF-8 será encerrada em nulo somente se a cadeia de caracteres de entrada Unicode for terminada em nulo.
A rotina retornará STATUS_BUFFER_TOO_SMALL se o parâmetro UTF8StringMaxByteCount especificar um tamanho de buffer muito pequeno para conter toda a cadeia de caracteres de saída. Nesse caso, a rotina grava quantos caracteres UTF-8 caberem no buffer, e o valor de *
Você pode fazer uma chamada inicial para RtlUnicodeToUTF8N para obter o tamanho do buffer de saída necessário e, em seguida, chamar RtlUnicodeToUTF8N novamente para obter a cadeia de caracteres de saída Unicode. Na chamada inicial, defina UTF8StringDestination = NULL e UTF8StringMaxByteCount = 0 e a rotina gravará o tamanho do buffer necessário em *UTF8StringActualByteCount. Em seguida, aloque um buffer do tamanho necessário e chame RtlUnicodeToUTF8N uma segunda vez para obter a cadeia de caracteres de saída UTF-8.
RtlUnicodeToUTF8N dá suporte a pares alternativos Unicode. No entanto, um valor de palavra principal alternativo que não é seguido por um valor de palavra à direita ou um valor de palavra à direita que não é precedido por um valor de palavra principal, não é reconhecido como um código de caractere válido e é substituído pelo caractere de substituição Unicode, U+FFFD.
RtlUnicodeToUTF8N continua convertendo a cadeia de caracteres de entrada em uma cadeia de caracteres de saída até chegar ao final do buffer de origem ou ao final do buffer de destino, o que ocorrer primeiro. A rotina converte todos os caracteres nulos na cadeia de caracteres de entrada em caracteres nulos na cadeia de caracteres de saída. Se a cadeia de caracteres de entrada contiver um caractere nulo de terminação, mas o caractere nulo não estiver localizado no final do buffer de origem, a rotina continuará após o caractere nulo de terminação até chegar ao final do espaço de buffer disponível.
A rotina RtlUTF8ToUnicodeN converte uma cadeia de caracteres UTF-8 em uma cadeia de caracteres Unicode.
Você pode usar rtlUnicodeToUTF8N e rtlUTF8ToUnicodeN rotinas para executar uma conversão sem perdas de cadeias de texto válidas entre os formatos Unicode e UTF-8. No entanto, cadeias de caracteres que têm valores de dados arbitrários provavelmente violarão as regras Unicode para codificar pares substitutos e qualquer informação contida nos valores inválidos em uma cadeia de caracteres de entrada será perdida e não poderá ser recuperada da cadeia de caracteres de saída resultante.
Requisitos
Requisito | Valor |
---|---|
de cliente com suporte mínimo | Windows 7 |
da Plataforma de Destino |
Universal |
cabeçalho | ntifs.h (incluem Ntifs.h, Wdm.h, Ntifs.h) |
biblioteca | NtosKrnl.lib |
de DLL |
NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |