Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как перекодировать UTF-8 / 10 сообщений из 10, страница 1 из 1
18.11.2009, 21:51
    #36318451
Игорь С
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перекодировать UTF-8
Как перекодировать файл в UTF-8 в текст Win
...
Рейтинг: 0 / 0
18.11.2009, 22:11
    #36318466
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перекодировать UTF-8
Код: 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
19.11.2009, 01:58
    #36318647
Игорь С
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перекодировать UTF-8
Большое спасибо, пробую ...
...
Рейтинг: 0 / 0
19.11.2009, 02:04
    #36318651
Игорь С
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перекодировать UTF-8
Что-то получается не совсем тот текст, что при просмотре HTML -кода в Эксплорере
...
Рейтинг: 0 / 0
19.11.2009, 08:22
    #36318763
ZVI
ZVI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перекодировать UTF-8
Вот ещё один вариант. Помимо перекодировки в нем <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
19.11.2009, 11:25
    #36319158
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перекодировать UTF-8
Вариант более правильный:
Код: 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
19.11.2009, 17:20
    #36320451
ZVI
ZVI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как перекодировать UTF-8
AntonariyВариант более правильный:

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

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

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

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


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