Текст -> UTF8 -> ANSI Автоматом 8)

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
xenomorph
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 508
Зарегистрирован: 18.04.2004 (Вс) 11:41
Откуда: это не важно - на сегодня у меня есть алиби ...

Текст -> UTF8 -> ANSI Автоматом 8)

Сообщение xenomorph » 26.03.2005 (Сб) 17:46

Привет Всем!

Вопрос:

Нужно автоматически перекодировать текст так:

Текст -> UTF8 -> ANSI

Если у кого есть идеи -
Заранее Огромное спаибо!
... Dpkjvfnm dc`xnj itdtkbnmcz, f tckb yt itdtkbnmcz hfcitdtkbnm b dpkjvfnm !!! ...

Qubicz
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 16.10.2004 (Сб) 20:21
Откуда: Санкт-Петербург

Сообщение Qubicz » 27.03.2005 (Вс) 2:23

Код: Выделить всё
'  APIs 
Private Declare Function LocalAlloc Lib "kernel32.dll" (ByVal wFlags As Long, ByVal wBytes As Long) As Long
Private Declare Function LocalFree Lib "kernel32.dll" (ByVal hMem As Long) As Long
Private 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
Private 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
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
'  Constants 
Private Const CP_UTF8       As Long = 65001
Private Const LMEM_ZEROINIT As Long = &H40

'--------------------------------------------------------------------------------
' Проект     :  OfflineClient
' Процедура  :  WinToUTF8
' Описание   :  Перевод строки в UTF8 кодировку
' Кем создан :  SNE
' Дата-Время :  09.11.2004-11:52:01
'
' Параметры  :  inString    - Строка, в win кодировке
'               lMaxSize    - Максимальный размер строки
'--------------------------------------------------------------------------------
Private 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

'--------------------------------------------------------------------------------
' Проект     :  OfflineClient
' Процедура  :  UTF8ToWin
' Описание   :  Перевод UTF8 строки в WIN кодировку
' Кем создан :  SNE
' Дата-Время :  09.11.2004-11:56:58
'
' Параметры  :  inString    - Строка в utf8 кодировке
'               lMaxSize    - Максимальный размер строки
'--------------------------------------------------------------------------------
Private Function UTF8ToWin(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(CP_UTF8, 0&, inString, &HFFFF, hMemLock1, lMaxSize)
        iStrSize = WideCharToMultiByte(0&, 0&, hMemLock1, &HFFFF, hMemLock2, iStrSize, 0&, 0&)

        If Len(iStrSize) Then
            UTF8ToWin = String$(iStrSize, 0&)
            Call CopyMemory(ByVal UTF8ToWin, ByVal hMemLock2, iStrSize)
        End If

        Call LocalFree(hMemLock1)
        Call LocalFree(hMemLock2)
End Function

Inferno
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 179
Зарегистрирован: 26.01.2005 (Ср) 1:06

Re: Текст -> UTF8 -> ANSI Автоматом 8)

Сообщение Inferno » 29.03.2005 (Вт) 18:16

xenomorph писал(а): Текст -> UTF8 -> ANSI


Что-то я не вижу в этом особого смысла. Текст в какой кодировке? Если он изначально в анси то накой его кодировать в UTF-8? Если нет то надо его перекодировать в юникод а оттуда через strconv в анси.

Unicode (cp 1200) это не тоже самое что UTF-8 (cp 65000).


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 194

    TopList