Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 |

 

  Вопрос: перекодировать текст ASCII в UTF-8 Добавлено: 27.02.08 15:38  

Автор вопроса:  bowfinger
Кто подскажет. Как в VBA или с помощью Windows функций перекодировать текст ASCII в UTF-8 и наоборот?
Очень нужно!

Ответить

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

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



ICQ: 298826769 

Вопросов: 53
Ответов: 1732
 Профиль | | #1 Добавлено: 27.02.08 18:03
вроде что-то было наподобие апи WideCharToMultiByte, или подобное.... не помню. Можешь воспользоваться левыми библиотеками: ConvertCyr, FastRecoder(http://www.wajim.fatal.ru/) или chilcat charset... Последний у меня на хомяке есть, но к нему надо лекарство искать, то, что есть, не прокатывает. Притом не знаю, как в вба со внешними либами....

Ответить

Номер ответа: 2
Автор ответа:
 el-paso



Вопросов: 3
Ответов: 164
 Профиль | | #2 Добавлено: 27.02.08 21:31
Курите хелп по функции StrConv.
Она все перекодирует.

Ответить

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


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #3
Добавлено: 27.02.08 22:13
Сначала MultiByteToWideChar с CP_ACP, чтобы перевести из ANSI в юникод. Затем WideCharToMultiByte c CP_UTF8, чтобы конвертнуть юникод в UTF-8.

Кроссплатформенный вариант: воспользоваться библиотекой iconv.

el-paso: ты уверен, что StrConv понимает UTF-8?

Ответить

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



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #4
Добавлено: 27.02.08 23:38
Готовый модуль, не так давно нашел где-то в нете. Оч удобный.
Option Explicit
Private Const CP_UTF8 = 65001
Private Const CP_ACP = 0
Private Declare Function GetACP Lib "Kernel32" () As Long
Private Declare Function WideCharToMultiByte Lib "Kernel32" (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, lpUsedDefaultChar As Long) As Long
Private Declare Function MultiByteToWideChar Lib "Kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long

Private Function WToA(ByVal st As String, Optional ByVal cpg As Long = -1, Optional lFlags As Long = 0) As String
    Dim stBuffer As String
    Dim cwch As Long
    Dim pwz As Long
    Dim pwzBuffer As Long
    Dim lpUsedDefaultChar As Long
    
    If cpg = -1 Then cpg = GetACP()
    pwz = StrPtr(st)
    cwch = WideCharToMultiByte(cpg, lFlags, pwz, -1, 0&, 0&, ByVal 0&, ByVal 0&;)
    stBuffer = String$(cwch + 1, vbNullChar)
    pwzBuffer = StrPtr(stBuffer)
    cwch = WideCharToMultiByte(cpg, lFlags, pwz, -1, pwzBuffer, Len(stBuffer), ByVal 0&, ByVal 0&;)
    WToA = Left$(stBuffer, cwch - 1)
End Function

Private Function AToW(ByVal st As String, Optional ByVal cpg As Long = -1, Optional lFlags As Long = 0) As String
    Dim stBuffer As String
    Dim cwch As Long
    Dim pwz As Long
    Dim pwzBuffer As Long
        
    If cpg = -1 Then cpg = GetACP()
    pwz = StrPtr(st)
    cwch = MultiByteToWideChar(cpg, lFlags, pwz, -1, 0&, 0&;)
    stBuffer = String$(cwch + 1, vbNullChar)
    pwzBuffer = StrPtr(stBuffer)
    cwch = MultiByteToWideChar(cpg, lFlags, pwz, -1, pwzBuffer, Len(stBuffer))
    AToW = Left$(stBuffer, cwch - 1)
End Function

Public Function EncodeUTF8(ByVal cnvUni As String) As String
    If cnvUni = vbNullString Then Exit Function
    EncodeUTF8 = StrConv(WToA(cnvUni, CP_UTF8), vbUnicode)
End Function

Public Function DecodeUTF8(ByVal cnvUni As String) As String
    If cnvUni = vbNullString Then Exit Function
    ;DecodeUTF8 = AToW(WToA(cnvUni, CP_ACP), CP_UTF8)
End Function

Ответить

Номер ответа: 5
Автор ответа:
 bowfinger



Вопросов: 13
Ответов: 5
 Профиль | | #5 Добавлено: 28.02.08 08:40
Спасибо всем за помощь. Winand дал самый лучший вариант

Ответить

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



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #6
Добавлено: 28.02.08 18:11
это вроде откуда-то с плэнет-сорс-кода. Там даже что-то помню исправил, потому что строка возвращалась вдвое длиннее, чем должна была

Ответить

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



Вопросов: 30
Ответов: 62
 Профиль | | #7 Добавлено: 29.07.08 11:58
А как перекодировать utf в windows?

Ответить

Страница: 1 |

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



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