Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [vbs] перекодировка 
:(
    Опции темы
iff
Дата 5.3.2013, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: -1
Всего: 16



Код

Function StrConvert(strText, strSourceCharset, strDestCharset)
    Const adTypeText = 2
    Const adModeReadWrite = 3
    
    Dim objStream
    
    Set objStream = CreateObject("ADODB.Stream")
    
    With objStream
        .Type = adTypeText
        .Mode = adModeReadWrite
        
        .Open
        .Charset = strSourceCharset
        .WriteText strText
        .Position = 0
        .Charset = strDestCharset
        strConvert = .ReadText
    End With
    
    Set objStream = Nothing
End Function

Почему-то не работает с utf-8:
Код

s = StrConvert("Слово", "windows-1251", "utf-8")



--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
Akina
Дата 5.3.2013, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Проверьте, что у Вас в HKEY_CLASSES_ROOT\MIME\Database\Charset\utf-8


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
iff
Дата 6.3.2013, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: -1
Всего: 16



Там 2 записи:
Codepage REG_DWORD 0x000004b0 (1200)
InternetEncoding REG_DWORD 0x0000fde9 (65001)
Но что они означают не нашел в инете

Это сообщение отредактировал(а) iff - 6.3.2013, 00:14


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
FallFan
Дата 6.3.2013, 00:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 30.3.2008
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Нашел в одном из скрипте функцию (не моя, но уже не вспомню где взял), может поможет:

Код

Enum CHARSET
  CS_DOS = 866
  CS_Windows = 1251
  CS_ISO = 28595
  CS_KOI8R = 20866
  CS_UTF7 = 65000
  CS_UTF8 = 65001
End Enum

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
         
Declare Function WideCharToMultiByte Lib "kernel32" _
        (ByVal CodePage As Long, _
         ByVal dwFlags As Long, _
         ByVal lpWideCharStr As String, _
         ByVal cchWideChar As Long, _
         ByVal lpMultiByteStr As String, _
         ByVal cchMultiByte As Long, ByVal _
         lpDefaultChar As String, _
         ByVal lpUsedDefaultChar As Long) _
         As Long

Function ConvertCharset(ByVal strString As String, ByVal FromCharset As CHARSET, ByVal ToCharset As CHARSET) As String
  Dim lngLength As Long
  Dim strWideChar As String
  Dim strReturn As String
  Dim lngReturnLength As Long
  Dim dwFlags As Long
   
  If FromCharset = CS_UTF7 Or FromCharset = CS_UTF8 Then
    dwFlags = 0
  Else
    dwFlags = MB_PRECOMPOSED
  End If
   
  lngLength = Len(strString)
  strWideChar = String$(lngLength * 2, Chr$(0))
  strReturn = String$(lngLength * 2, Chr$(0))
  lngReturnLength = MultiByteToWideChar(FromCharset, dwFlags, strString, lngLength, strWideChar, lngLength)
  WideCharToMultiByte ToCharset, 0, strWideChar, lngReturnLength, strReturn, lngLength * 2, ByVal 0, 0
  ConvertCharset = Left$(strReturn, lngReturnLength)
End Function

PM   Вверх
iff
Дата 6.3.2013, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: -1
Всего: 16



Спасибо за ответы. Впринципе можно самим написать функцию преобразования. В сети видел код на PHP для замены iconv. Переписал для vbs.
Но почему-то в vbs некорректно работают asc и chr
Например asc всегда возвращает код символа знака вопроса, если в качестве аргумента передать кириллическую букву. а chr как будто работает в кодировки cp1252 (если выводить результат в msgbox)



--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0851 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.