Функция WideCharToMultiByte

Declare Function WideCharToMultiByte Lib "kernel32" (ByVal codepage As Long, ByVal dwFlags As Long, lpWideCharStr As Any, ByVal cchWideChar As Long, lpMultiByteStr As Any, ByVal cchMultiByte As Long, ByVal lpDefaultChar As String, ByVal lpUsedDefaultChar As Long) As Long

WideCharToMultiByte преобразует заданную строку Unicode в ANSI на основании заданной кодовой страницы

Возвращаемое значение

В успешном случае возвращается количество символов в lpMultiByteStr или необходимая длина буфера, если параметр cchMultiByte равен 0. В случае ошибки возвращается 0 (используйте GetLastError для получения кода ошибки)


codepage
Кодовая страница, используемая для конвертации. Можно использовать следующие значения
CP_ACP = 0Кодовая страница ANSI
CP_MACCPКодовая страница Macintosh
CP_OEMCPКодовая страница OEM
CP_SYMBOLWindows 2000 и выше: Кодовая страница SYMBOL
CP_THREAD_ACPWindows 2000 и выше: Кодовая страница ANSI для текущей нити
CP_UTF7Windows 98/Me/NT 4.0/2000 и выше: Translate using UTF-7. When this is set, lpDefaultChar and lpUsedDefaultChar must be NULL
CP_UTF8Windows 98/Me/NT 4.0/2000 и выше: Translate using UTF-8. When this is set, dwFlags must be zero and both lpDefaultChar and lpUsedDefaultChar must be NULL
dwFlags
Комбинация различных флагов
WC_NO_BEST_FIT_CHARSWindows 2000 or later: Any Unicode characters that do not translate directly to multibyte equivalents will be translated to the default character (see lpDefaultChar parameter). In other words, if translating from Unicode to multibyte and back to Unicode again does not yield the exact same Unicode character, the default character is used. This flag may be used by itself or in combination with the other dwFlag options
WC_COMPOSITECHECKConvert composite characters to precomposed characters
WC_DISCARDNSDiscard nonspacing characters during conversion
WC_SEPCHARSGenerate separate characters during conversion. This is the default conversion behavior
WC_DEFAULTCHARReplace exceptions with the default character during conversion
lpWideCharStr
Unicode-строка для конвертации
cchWideChar
Длина строки lpWideCharStr в символах. При значении -1 длина строки вычисляется автоматически
lpMultiByteStr
Получаемая строка после конвертации
cchMultiByte
Длина строки lpMultiByteStr. Используйте 0, чтобы получить необходимую длину
lpDefaultChar
Символ, используемый для замены тех символов, которые не удалось преобразовать. Для использования системного символа по умолчанию используйте 0
lpUsedDefaultChar
Флаг, показывающий использование системного символа

Пример

' Возвращает ANSI-строку из указателя на Unicode-строку

Public Function GetStrFromPtrW(lpszW As Long) As String
     Dim sRtn As String

     sRtn = String$(lstrlenW(ByVal lpszW) * 2, 0)   ' 2 bytes/char

   ' WideCharToMultiByte также возвращает длину Unicode-строки
   '  sRtn = String$(WideCharToMultiByte(CP_ACP, 0, ByVal lpszW, -1, 0, 0, 0, 0), 0)

     Call WideCharToMultiByte(CP_ACP, 0, ByVal lpszW, -1, ByVal sRtn, Len(sRtn), 0, 0)
     GetStrFromPtrW = GetStrFromBufferA(sRtn)

   End Function

Public Function GetStrFromBufferA(sz As String) As String
     If InStr(sz, vbNullChar) Then
       GetStrFromBufferA = Left$(sz, InStr(sz, vbNullChar) - 1)
     Else
       ' If sz had no null char, the Left$ function
       ' above would return a zero length string ("").
       GetStrFromBufferA = sz
     End If
   End Function

Смотри также

MultiByteToWideChar

Категория

Кодировки и Unicode