Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Смена кодировки Добавлено: 23.10.09 18:10  

Автор вопроса:  Abiron
Подскажите нормальный рабочий код для превода из utf в windows и обратно? А то, тот что сейчас есть работает очень коряво. Заранее спс.

Ответить

  Ответы Всего ответов: 3  

Номер ответа: 1
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #1
Добавлено: 23.10.09 20:57
какое утф? utf-8?
  1. 'Conversion UTF-8 -> UTF-16
  2. Public Function dec_UTF8(ByVal str As String) As String
  3.     Dim stBuffer As String, cwch As Long, dat() As Byte
  4.     dat = StrConv(str, vbFromUnicode)
  5.     ReDim Preserve dat(UBound(dat) + 1)
  6.     cwch = MultiByteToWideChar(CP_UTF8, 0, VarPtr(dat(0)), -1, 0&, 0&)
  7.     stBuffer = String$(cwch + 1, vbNullChar)
  8.     cwch = MultiByteToWideChar(CP_UTF8, 0, VarPtr(dat(0)), -1, StrPtr(stBuffer), Len(stBuffer))
  9.     dec_UTF8 = Left$(stBuffer, cwch - 1)
  10. End Function


  1. '--------------------------------------------------------------------------------
  2. ' Проект : OfflineClient
  3. ' Процедура : WinToUTF8
  4. ' Описание : Перевод строки в UTF8 кодировку
  5. ' Кем создан : SNE
  6. ' Дата-Время : 09.11.2004-11:52:01
  7. '
  8. ' Параметры : inString - Строка, в win кодировке
  9. ' lMaxSize - Максимальный размер строки
  10. '--------------------------------------------------------------------------------
  11. Private Function WinToUTF8(ByRef inString As String, _
  12.                            ByVal lMaxSize As Long) As String
  13.  
  14.         If inString = vbNullString Then Exit Function
  15.  
  16.         Dim hMemLock1 As Long, hMemLock2 As Long
  17.         Dim iStrSize As Long
  18.  
  19.         hMemLock1 = GlobalAlloc(GPTR, lMaxSize)
  20.         hMemLock2 = GlobalAlloc(GPTR, lMaxSize)
  21.  
  22.         iStrSize = MultiByteToWideChar(0&, 0&, inString, -1, hMemLock1, lMaxSize)
  23.         iStrSize = WideCharToMultiByte(65001, 0&, hMemLock1, iStrSize, hMemLock2, lMaxSize, 0&, 0&) ' CP_UTF8
  24.  
  25.         If Len(iStrSize) Then
  26.             WinToUTF8 = String$(iStrSize - vbNull, 0&)
  27.             Call CopyMemory(ByVal WinToUTF8, ByVal hMemLock2, iStrSize - vbNull)
  28.         End If
  29.  
  30.         Call GlobalFree(hMemLock1)
  31.         Call GlobalFree(hMemLock2)
  32. End Function
  33.  
  34. '--------------------------------------------------------------------------------
  35. ' Проект : OfflineClient
  36. ' Процедура : UTF8ToWin
  37. ' Описание : Перевод UTF8 строки в WIN кодировку
  38. ' Кем создан : SNE
  39. ' Дата-Время : 09.11.2004-11:56:58
  40. '
  41. ' Параметры : inString - Строка в utf8 кодировке
  42. ' lMaxSize - Максимальный размер строки
  43. '--------------------------------------------------------------------------------
  44. Private Function UTF8ToWin(ByRef inString As String, _
  45.                            ByVal lMaxSize As Long) As String
  46.  
  47.         If inString = vbNullString Then Exit Function
  48.  
  49.         Dim hMemLock1 As Long, hMemLock2 As Long
  50.         Dim iStrSize As Long
  51.  
  52.         hMemLock1 = GlobalAlloc(GPTR, lMaxSize)
  53.         hMemLock2 = GlobalAlloc(GPTR, lMaxSize)
  54.  
  55.         iStrSize = MultiByteToWideChar(CP_UTF8, 0&, inString, -1, hMemLock1, lMaxSize)
  56.         iStrSize = WideCharToMultiByte(0&, 0&, hMemLock1, -1, hMemLock2, iStrSize, 0&, 0&)
  57.  
  58.         If Len(iStrSize) Then
  59.             UTF8ToWin = String$(iStrSize - vbNull, 0&)
  60.             Call CopyMemory(ByVal UTF8ToWin, ByVal hMemLock2, iStrSize - vbNull)
  61.         End If
  62.  
  63.         Call GlobalFree(hMemLock1)
  64.         Call GlobalFree(hMemLock2)
  65. End Function

Ответить

Номер ответа: 2
Автор ответа:
 Abiron



Вопросов: 30
Ответов: 62
 Профиль | | #2 Добавлено: 24.10.09 13:02
Компилятор ругается на аллоки, но даже если их заменить на стринги, ему не нравятся MultiByteToWideChar. Подскажи, что я делаю не так?

Ответить

Номер ответа: 3
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #3
Добавлено: 24.10.09 13:50
Очень просто, ты не объявляешь АПИ-функции и константы. Я только код, без объявлений привел, потому что лень искать.
Private declare ...
Private Const ...

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам