Страница: 1 |
Вопрос: перекодировать текст ASCII в UTF-8 | Добавлено: 27.02.08 15:38 |
Автор вопроса: ![]() |
Кто подскажет. Как в VBA или с помощью Windows функций перекодировать текст ASCII в UTF-8 и наоборот?
Очень нужно! |
Ответы | Всего ответов: 7 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ICQ: 298826769 Вопросов: 53 Ответов: 1732 |
Профиль | Цитата | #1 | Добавлено: 27.02.08 18:03 |
вроде что-то было наподобие апи WideCharToMultiByte, или подобное.... не помню. Можешь воспользоваться левыми библиотеками: ConvertCyr, FastRecoder(http://www.wajim.fatal.ru/) или chilcat charset... Последний у меня на хомяке есть, но к нему надо лекарство искать, то, что есть, не прокатывает. Притом не знаю, как в вба со внешними либами.... |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() Вопросов: 3 Ответов: 164 |
Профиль | Цитата | #2 | Добавлено: 27.02.08 21:31 |
Курите хелп по функции StrConv.
Она все перекодирует. |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Лидер форума ICQ: 216865379 Вопросов: 106 Ответов: 9979 |
Web-сайт: Профиль | Цитата | #3 | Добавлено: 27.02.08 22:13 |
Сначала MultiByteToWideChar с CP_ACP, чтобы перевести из ANSI в юникод. Затем WideCharToMultiByte c CP_UTF8, чтобы конвертнуть юникод в UTF-8.
Кроссплатформенный вариант: воспользоваться библиотекой iconv. el-paso: ты уверен, что StrConv понимает UTF-8? |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 87 Ответов: 2795 |
Web-сайт: Профиль | Цитата | #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 ![]() End Function |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 13 Ответов: 5 |
Профиль | Цитата | #5 | Добавлено: 28.02.08 08:40 |
Спасибо всем за помощь. Winand дал самый лучший вариант |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 87 Ответов: 2795 |
Web-сайт: Профиль | Цитата | #6 | Добавлено: 28.02.08 18:11 |
это вроде откуда-то с плэнет-сорс-кода. Там даже что-то помню исправил, потому что строка возвращалась вдвое длиннее, чем должна была |
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 30 Ответов: 62 |
Профиль | Цитата | #7 | Добавлено: 29.07.08 11:58 |
А как перекодировать utf в windows? |
Страница: 1 |
|