Пишу клиет-серверное приложение (клиенты Android, сервер win7 VB 6.0). Не могу побороть конвертацию на стороне сервера utf-8 в ascii. Использую функцию Артура для ковертации utf -> ascii:
- Код: Выделить всё
Public Function UTF8ToWin(ByVal inString As String) As String
Dim hMemLock1 As Long, hMemLock2 As Long
Dim iStrSize As Long, lMaxSize As Long, str1 As String, str2 As String
inString = inString & vbNullChar
lMaxSize = Len(inString)
str1 = String$(lMaxSize, Chr(0))
str2 = String$(lMaxSize, Chr(0))
hMemLock1 = StrPtr(str1)
hMemLock2 = StrPtr(str2)
iStrSize = MultiByteToWideChar(65001, 0&, inString, -1, hMemLock1, lMaxSize)
iStrSize = WideCharToMultiByte(0&, 0&, hMemLock1, -1, hMemLock2, iStrSize, 0&, 0&)
If Len(iStrSize) Then
UTF8ToWin = StrConv(str2, vbUnicode)
End If
End Function
И функцию ascii -> utf-8:
- Код: Выделить всё
Public Function EncodeUTF8(strSrc As String) As String
Dim nLen As Long
Dim strDst As String
Dim strRet As String
Dim nRet As Long
Dim p As Long
nLen = Len(strSrc)
strDst = String(nLen * 2, Chr(0))
strRet = String(nLen * 2, Chr(0))
p = StrPtr(strDst)
nRet = MultiByteToWideChar(0&, &H1, strSrc, nLen, p, nLen)
nRet = WideCharToMultiByte(65001, 0, p, nRet, StrPtr(strRet), nLen * 2, ByVal 0, 0)
EncodeUTF8 = Left$(StrConv(strRet, vbUnicode), nRet)
End Function
Локально кодировка и декодировка работает отлично. Проблемы начинаются когда клиент посылает строку в utf-8. Получается, что результирующая строка меньше на несколько символом, причем каждый раз на разное количество. Проблем нет, когда строка "приходит" только на англ. языке, но как только появляются русские символы, пропадают символы.
Я так думаю, что не совсем правильно определяется длина строки. Но как это побороть не могу понять.
Подскажите где грабли