powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как перекодировать UTF-8
10 сообщений из 10, страница 1 из 1
Как перекодировать UTF-8
    #36318451
Игорь С
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как перекодировать файл в UTF-8 в текст Win
...
Рейтинг: 0 / 0
Как перекодировать UTF-8
    #36318466
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
'из utf-8 в Unicode
function UTF8_16( s )
    UTF8_16 = ""
    dim i, j, j2, ch, k1, k2, k3, m
    i =  1 
    do while i <= Len( s )
        ch = Mid( s, i,  1  )
        j = clng( Asc( ch ) )
        if j >=  128  then
            if j <  224  then
                '2 байта
                k1 = j mod  32 
                i = i +  1 
                ch = Mid( s, i,  1  )
                j2 = clng( Asc( ch ) )
                k2 = j2 mod  64 
                'ChrW - символ по UTF-16 значению
                UTF8_16 = UTF8_16 & ChrW( k2 + k1 *  64  )
            else
                '3 байта
                k1 = j mod  16 
                i = i +  1 
                ch = Mid( s, i,  1  )
                j2 = clng( Asc( ch ) )
                k2 = j2 mod  64 
                i = i +  1 
                ch = Mid( s, i,  1  )
                j2 = clng( Asc( ch ) )
                k3 = j2 mod  64 
                UTF8_16 = UTF8_16 & ChrW( k3 + ( k2 + k1 *  64  ) *  64  )
            end if
        else 
            UTF8_16 = UTF8_16 & ch
        end if
        i = i +  1 
    loop
end function

dim s as string

s = UTF8_16("сюда подставьте вашу utf-8 строку")
...
Рейтинг: 0 / 0
Как перекодировать UTF-8
    #36318647
Игорь С
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо, пробую ...
...
Рейтинг: 0 / 0
Как перекодировать UTF-8
    #36318651
Игорь С
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что-то получается не совсем тот текст, что при просмотре HTML -кода в Эксплорере
...
Рейтинг: 0 / 0
Как перекодировать UTF-8
    #36318763
ZVI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот ещё один вариант. Помимо перекодировки в нем <br> заменяется на новую строку, а <p> удаляется:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Private Declare Function MultiByteToWideChar Lib "kernel32" (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

' Перекодировка из UTF8 в Win-1251
Function UTF8ToWin(sUTF As String) As String
  Const CP_UTF8 =  65001 
  Dim i&, s$
  If Len(sUTF) =  0  Then Exit Function
  i& = MultiByteToWideChar(CP_UTF8,  0 &, sUTF, &HFFFF, s,  0 )
  If i <>  0  Then
    s = String$(i *  2 ,  0 &)
    Call MultiByteToWideChar(CP_UTF8,  0 &, sUTF, &HFFFF, s, i)
    s = StrConv(s, vbFromUnicode)
    s = Replace(s, "<br>", vbLf,  1 , - 1 , vbTextCompare)
    s = Replace(s, "<p>", "",  1 , - 1 , vbTextCompare)
    UTF8ToWin = s
  End If
End Function
...
Рейтинг: 0 / 0
Как перекодировать UTF-8
    #36319158
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариант более правильный:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Public Declare Function MultiByteToWideCharA Lib "kernel32.dll" Alias "MultiByteToWideChar" ( _
    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 Function DecodeUTF8(ByVal sInput As String) As String
Dim iStrSize As Long, lMaxSize As Long, str1 As String
Dim p As Long
Dim str2 As String
    If Len(sInput) =  0  Then Exit Function

    lMaxSize = Len(sInput)
    str1 = String$(lMaxSize,  0 &)
    iStrSize = MultiByteToWideCharA( 65001 ,  0 &, sInput, &HFFFF, StrPtr(str1), lMaxSize)
    If iStrSize >  0  Then
        DecodeUTF8 = Left$(str1, iStrSize -  1 )
    Else
        DecodeUTF8 = sInput
    End If
End Function

Jah loves you.
...
Рейтинг: 0 / 0
Как перекодировать UTF-8
    #36320451
ZVI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyВариант более правильный:

Да, так лучше. И c тэгами лучше отдельно разбираться.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как перекодировать UTF-8
    #39923158
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поспорю.
Стал пользоваться, и столкнулся с ошибкой.

strptr передаёт LongPtr, а функция ожидает принятия Long. И выполнение стопорится((
...
Рейтинг: 0 / 0
Как перекодировать UTF-8
    #39923175
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles Weyland
поспорю.
Стал пользоваться, и столкнулся с ошибкой.

strptr передаёт LongPtr, а функция ожидает принятия Long. И выполнение стопорится((

От же ж проблема-то....Clng(strptr())
...
Рейтинг: 0 / 0
Как перекодировать UTF-8
    #39923217
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да я допёр. Даже ещё проще.
во-первых, в современных реалиях необходимо писать PtrSafe после Declare, а во-вторых, в объявлении заголовка функции писать не Long, а LongPtr.
Вчера обгуглился, а ответ прост оказался...
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как перекодировать UTF-8
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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