powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Конвертировать в UTF8
7 сообщений из 7, страница 1 из 1
Конвертировать в UTF8
    #38430054
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно текст в UTF8 конвертировать.
Не знаю с какой системы.

Делаю на php сайт. Так как база в access'е (синхронизируется с mysql), то одну страницу php'шного кода переписал в VB6 чтоб сгенерировать готовый код html, который является динамический так как берет данные с б/д, но я хочу с него сделать статическую страницу html с помощью типа своего "компилятора". Страниц много, и только по надобности я буду компилировать код в html. Когда копировал код с php в VB6 чтоб команды на бейсик, то наткнулся на текст (написан кирилицой в редакторе Dreamweaver), который в VB6 редакторе стал непонятным (два символа вместо одного). Решил не обращать на это внимания и программный комментарий + текст для печати в html переписал еще раз на кирилицу. Теперь когда программа готова и может генерировать страницу, я понял что проблемы с кодировкой. Если убрать с HTML заглавие где charset=utf-8, то страница показывается хорошо.
Код: vbnet
1.
If Not Stacionarno Then AddHTML "<META http-equiv=""Content-Type"" content=""text/html; charset=utf-8"" />"



Я бы мог остаться на этой кодировке, но база данных MySQL работает на utf-8

Мне бы даже лучше было остаться на той системе, а то в самом начале нужно прописывать в PHP mysql_query("SET NAMES 'utf8'");
Код: php
1.
2.
3.
4.
5.
<?php
$mybdsql=mysql_connect($dbhst, $dbus, $dbpsw);
$mytablsql=mysql_select_db($dbname);
mysql_query("SET NAMES 'utf8'");
?>


Если этого не сделать, то при сохранении любого текста в кирилицу через HTML в базе данных MySQL не отображается кирилица а в два раза больше эроглифов. Я пробовал и charset менять. Ничего не помогло и создавал новую б/д с CP.. кодировкой. Пока не прописал код mysql_query("SET NAMES 'utf8'"). А на форуме ответили типа ничего страшного, много времени не потратит это объявления mysql_query("SET NAMES 'utf8'");.

Вот такой сюжет
Пробовать долбить кодировку на MySQL или искать для VB6 функцию конвертации в UTF-8 ?
...
Рейтинг: 0 / 0
Конвертировать в UTF8
    #38430141
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помогите найти конвертацию кода в UTF8 наверное из (cp1251 (не знаю в кокой кодировке VB6 работает)). Удивительно что с access копированием базы на mysql никаких проблем не возникает даже если на сервере провайдера поменять кодировку.
...
Рейтинг: 0 / 0
Конвертировать в UTF8
    #38430184
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашел

Данная функция конвертирует код с CP1251 в UTF-8 прямо с переменной, без заморочек читать и сохранять в файл.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Public Function WinToUTF8(ByRef inString As String, ByVal lMaxSize As Long) As String
  Dim hMemLock1 As Long, hMemLock2 As Long
  Dim iStrSize As Long
  hMemLock1 = LocalAlloc(LMEM_ZEROINIT, lMaxSize)
  hMemLock2 = LocalAlloc(LMEM_ZEROINIT, lMaxSize)
  iStrSize = MultiByteToWideChar(0&, 0&, inString, &HFFFF, hMemLock1, lMaxSize)
  iStrSize = WideCharToMultiByte(65001, 0&, hMemLock1, iStrSize, hMemLock2, lMaxSize, 0&, 0&) ' CP_UTF8
  If Len(iStrSize) Then
  WinToUTF8 = String$(iStrSize, 0&)
  Call CopyMemory(ByVal WinToUTF8, ByVal hMemLock2, iStrSize)
  End If
  Call LocalFree(hMemLock1)
  Call LocalFree(hMemLock2)
End Function



Чтоб заработала в модуле нужно объявить:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Public Declare Function LocalAlloc Lib "kernel32.dll" (ByVal wFlags As Long, ByVal wBytes As Long) As Long
Public Declare Function LocalFree Lib "kernel32.dll" (ByVal hMem As Long) As Long
Public 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 Long, ByVal cchWideChar As Long) As Long
Public Declare Function WideCharToMultiByte Lib "kernel32.dll" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, ByVal lpDefaultChar As Long, ByVal lpUsedDefaultChar As Long) As Long
Public Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
Private Const CP_UTF8 As Long = 65001
Private Const LMEM_ZEROINIT As Long = &H40
...
Рейтинг: 0 / 0
Конвертировать в UTF8
    #38430274
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для надежности дописал код
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Public Function WinToUTF8TXT(Txt As Variant) As String
 If Txt & "" = "" Then Exit Function
 Dim i As Long, s As String, Tmp As String
 Tmp = Txt
 i = (Len(Tmp) + 1) * 2
  s = WinToUTF8(Tmp, i)
  s = Left(s, Len(Tmp) * 2)
  WinToUTF8TXT = s
End Function



Придется меньше думать о длине ByVal lMaxSize As Long, а также есть моменты когда в код попали символы chr(0) в конце, так как для вывода одного символа нужно было вписать lMaxSize =3 вместо 2, для надежности 4 пишу (на 2 больше -> (Len(Tmp) + 1) * 2) иначе почему-то не работает. Так как код WinToUTF8 не мой, то с "почему-то" борюсь просто s = Left(s, Len(Tmp) * 2), так как знаю что код может увеличится в 2 раза (не больше). Работает стабильно. На больших текстах не пробовал, но строчки If Txt & "" = "" Then Exit Function использовал из-за предосторожности, так как Txt может быть Null потому как читаю с базы данных данные поля, а сама функция WinToUTF8TXT капризна из-за использования Declare Function.... которые в случай что не так вырубают VB6 полностью с процеса.
...
Рейтинг: 0 / 0
Конвертировать в UTF8
    #38430283
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей159, а как запускать Function WinToUTF8TXT что в Txt будет?
...
Рейтинг: 0 / 0
Конвертировать в UTF8
    #38430294
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Катастрофа, все ты знаешь, не надо...
Код: vbnet
1.
  label_el = "<label for=""" & NMpl & """ id=""lb" & PBLST_Tbl("nmpl") & """>" & WinToUTF8TXT(PBLST_Tbl("NmRubr")) & "</label>"


Просто если в поле PBLST_Tbl("NmRubr")=Null - вызовет ошибку. Только для этого на всякий случай (As Variant) и If Txt & "" = "" Then Exit Function (вместо isnull работает стабильно уже обсуждали)
...
Рейтинг: 0 / 0
Конвертировать в UTF8
    #38430299
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно и в Txt (ByRef) возвращать, но уже комарит что-то делать, особенно если часто выкидывает из процесса и все наново... Пробовал так WinToUTF8(Tmp, (Len(Tmp) + 1) * 2) - выкинуло. Не знаю, может текст был длинный, не разбирался. По этому расписал.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Конвертировать в UTF8
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]