Win-UTF8

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
bevaine2000
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 159
Зарегистрирован: 15.04.2005 (Пт) 23:45

Win-UTF8

Сообщение bevaine2000 » 19.04.2005 (Вт) 16:47

Какая функция делает данный сабж :shock:

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 19.04.2005 (Вт) 16:53

Есть два массива - кодовые страницы. Функция меняет в строке знак из одного массива на знак с соответствующего места другого массива.

Qubicz
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 16.10.2004 (Сб) 20:21
Откуда: Санкт-Петербург

Сообщение Qubicz » 19.04.2005 (Вт) 19:45


bevaine2000
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 159
Зарегистрирован: 15.04.2005 (Пт) 23:45

Сообщение bevaine2000 » 19.04.2005 (Вт) 20:44

Сенкс :)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 20.04.2005 (Ср) 1:30

Amed писал(а):Есть два массива - кодовые страницы. Функция меняет в строке знак из одного массива на знак с соответствующего места другого массива.

Не сканает - UTF8 переменной длины.
Изображение

alexanderz
Обычный пользователь
Обычный пользователь
 
Сообщения: 64
Зарегистрирован: 16.01.2005 (Вс) 20:30
Откуда: Россия, Пермь

Сообщение alexanderz » 22.04.2005 (Пт) 15:46

Думаю, константу win1252 знаешь и подставить сможешь :roll:

Код: Выделить всё
Private Declare Function GlobalAlloc Lib "kernel32.dll" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long
Private Declare Function GlobalFree Lib "kernel32.dll" (ByVal hMem As Long) As Long
Private Declare Function MultiByteToWideChar Lib "kernel32.dll" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpMultiByteStr As String, ByVal cchMultiByte As Long, ByVal lpWideCharStr As String, ByVal cchWideChar As Long) As Long
Private Declare Function WideCharToMultiByte Lib "kernel32.dll" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As String, ByVal cchWideChar As Long, ByVal lpMultiByteStr As String, ByVal cchMultiByte As Long, ByVal lpDefaultChar As String, ByVal lpUsedDefaultChar As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
Public Declare Function IsTextUnicode Lib "advapi32" (ByVal lpBuffer As String, ByVal cb As Long, lpi As Long) As Long
Private Const CP_UTF8       As Long = 65001
Private Const GMEM_FIXED    As Long = &H0
Private Const GMEM_ZEROINIT As Long = &H40
Private Const GPTR          As Long = (GMEM_FIXED Or GMEM_ZEROINIT)

' Параметры  :  inString    - Строка, в win кодировке
'               lMaxSize    - Максимальный размер строки
'--------------------------------------------------------------------------------
Public Function WinToUTF8(ByRef InString As String, _
                           ByVal lMaxSize As Long) As String

        If InString = vbNullString Then Exit Function

        Dim hMemLock1   As Long, hMemLock2  As Long
        Dim iStrSize    As Long

        hMemLock1 = GlobalAlloc(GPTR, lMaxSize)
        hMemLock2 = GlobalAlloc(GPTR, lMaxSize)

        iStrSize = MultiByteToWideChar(0&, 0&, InString, &HFFFF, hMemLock1, lMaxSize)
        iStrSize = WideCharToMultiByte(65001, 0&, hMemLock1, iStrSize, hMemLock2, lMaxSize, 0&, 0&)  ' CP_UTF8

        If VBA.Len(iStrSize) Then
            WinToUTF8 = String$(iStrSize - vbNull, 0&)
            Call CopyMemory(ByVal WinToUTF8, ByVal hMemLock2, iStrSize - vbNull)
        End If

        Call GlobalFree(hMemLock1)
        Call GlobalFree(hMemLock2)
End Function

' Параметры  :  inString    - Строка в utf8 кодировке
'               lMaxSize    - Максимальный размер строки
'--------------------------------------------------------------------------------
Public Function UTF8ToWin(ByRef InString As String, _
                           ByVal lMaxSize As Long) As String

        If InString = vbNullString Then Exit Function

        Dim hMemLock1   As Long, hMemLock2  As Long
        Dim iStrSize    As Long

        hMemLock1 = GlobalAlloc(GPTR, lMaxSize)
        hMemLock2 = GlobalAlloc(GPTR, lMaxSize)

        iStrSize = MultiByteToWideChar(CP_UTF8, 0&, InString, &HFFFF, hMemLock1, lMaxSize)
        iStrSize = WideCharToMultiByte(0&, 0&, hMemLock1, &HFFFF, hMemLock2, iStrSize, 0&, 0&)

        If VBA.Len(iStrSize) Then
            UTF8ToWin = VBA.String$(iStrSize - vbNull, 0&)
            Call CopyMemory(ByVal UTF8ToWin, ByVal hMemLock2, iStrSize - vbNull)
        End If

        Call GlobalFree(hMemLock1)
        Call GlobalFree(hMemLock2)
End Function
http://forum.vbland.net/ - новый форум о программировании на Visual Basic

alexanderz
Обычный пользователь
Обычный пользователь
 
Сообщения: 64
Зарегистрирован: 16.01.2005 (Вс) 20:30
Откуда: Россия, Пермь

Сообщение alexanderz » 22.04.2005 (Пт) 15:47

Ой, спутал... :) Там она уже переводит в win1251 из utf8 и наоборот
http://forum.vbland.net/ - новый форум о программировании на Visual Basic

Qubicz
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 16.10.2004 (Сб) 20:21
Откуда: Санкт-Петербург

Сообщение Qubicz » 22.04.2005 (Пт) 21:59

А копирайты потерял...
А если сходить по ссылке в 3 посте, то увидишь тот же код...

alexanderz
Обычный пользователь
Обычный пользователь
 
Сообщения: 64
Зарегистрирован: 16.01.2005 (Вс) 20:30
Откуда: Россия, Пермь

Сообщение alexanderz » 23.04.2005 (Сб) 7:46

Я ниче не потерял - если посмотреть на мое мыло, то оно с vbnet.ru. А на этом сайте ведется строительснво VBNet Offline Client - я один из разработчиков. :twisted:
Внимательнее надо быть ;)
http://forum.vbland.net/ - новый форум о программировании на Visual Basic

bevaine2000
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 159
Зарегистрирован: 15.04.2005 (Пт) 23:45

Сообщение bevaine2000 » 23.04.2005 (Сб) 9:50

alexanderz
Спасибо за код!

Qubicz
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 16.10.2004 (Сб) 20:21
Откуда: Санкт-Петербург

Сообщение Qubicz » 23.04.2005 (Сб) 21:51

alexanderz писал(а):Я ниче не потерял - если посмотреть на мое мыло, то оно с vbnet.ru. А на этом сайте ведется строительснво VBNet Offline Client - я один из разработчиков. :twisted:
Внимательнее надо быть ;)

Прошу меня извинить... :oops:

alexanderz
Обычный пользователь
Обычный пользователь
 
Сообщения: 64
Зарегистрирован: 16.01.2005 (Вс) 20:30
Откуда: Россия, Пермь

Сообщение alexanderz » 26.04.2005 (Вт) 6:27

Qubicz писал(а):Прошу меня извинить... :oops:

Бываеть ;)
http://forum.vbland.net/ - новый форум о программировании на Visual Basic


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 9

    TopList