Страница: 1 |
Вопрос: Смена кодировки
Добавлено: 23.10.09 18:10
Автор вопроса: Abiron
Подскажите нормальный рабочий код для превода из utf в windows и обратно? А то, тот что сейчас есть работает очень коряво. Заранее спс.
Ответить
Номер ответа: 1Автор ответа: Winand
Вопросов: 87Ответов: 2795
Web-сайт: winandfx.narod.ru Профиль | | #1
Добавлено: 23.10.09 20:57
какое утф? utf-8?
Public Function dec_UTF8(ByVal str As String ) As String
Dim stBuffer As String , cwch As Long , dat() As Byte
dat = StrConv(str, vbFromUnicode)
ReDim Preserve dat(UBound(dat) + 1)
cwch = MultiByteToWideChar(CP_UTF8, 0, VarPtr(dat(0)), -1, 0&, 0&)
stBuffer = String $(cwch + 1, vbNullChar)
cwch = MultiByteToWideChar(CP_UTF8, 0, VarPtr(dat(0)), -1, StrPtr(stBuffer), Len(stBuffer))
dec_UTF8 = Left$(stBuffer, cwch - 1)
End Function
Private 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, -1, hMemLock1, lMaxSize)
iStrSize = WideCharToMultiByte(65001, 0&, hMemLock1, iStrSize, hMemLock2, lMaxSize, 0&, 0&)
If 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
Private 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, -1, hMemLock1, lMaxSize)
iStrSize = WideCharToMultiByte(0&, 0&, hMemLock1, -1, hMemLock2, iStrSize, 0&, 0&)
If Len(iStrSize) Then
UTF8ToWin = String $(iStrSize - vbNull, 0&)
Call CopyMemory(ByVal UTF8ToWin, ByVal hMemLock2, iStrSize - vbNull)
End If
Call GlobalFree(hMemLock1)
Call GlobalFree(hMemLock2)
End Function
Ответить
Страница: 1 |
Поиск по форуму