win1252->win1251

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Inferno
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 179
Зарегистрирован: 26.01.2005 (Ср) 1:06

win1252->win1251

Сообщение Inferno » 24.02.2005 (Чт) 14:16

Подскажите пожалуйста, каким образом можно конвертировать строку из windows-1252 в windows-1251
Последний раз редактировалось Inferno 24.02.2005 (Чт) 14:23, всего редактировалось 1 раз.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 24.02.2005 (Чт) 14:17

Название топика несколько контрастирует с содержимым :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 24.02.2005 (Чт) 14:21

GSerg писал(а):Название топика несколько контрастирует с содержимым :)

Зато прочитав содержимое, вздыхаешь с облегчением :lol:

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

Сообщение Inferno » 24.02.2005 (Чт) 14:25

Сорри исправился :)

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 24.02.2005 (Чт) 15:17

Если очень сильно надо, а остальные молчат, то могу предложить посимвольно :
[code]Type Win1252to1251
win1252 as byte
win1251 as byte
end type

Private Sub Form_load()
Dim CheckWin(255) as Win1252to1251
InitCheckWin
...
...
...
sChar=Check(sChar).win1252
or
sChar=Check(sChar).win1251

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 24.02.2005 (Чт) 15:48

Во-первых, я бы для таких целей юзал пару MultiByteToWideChar+WideCharToMultiByte (может, есть и единая функция - я не знаю).

Во-вторых, в расширенной части 1251 и 1252 афаик нету общих символов. Т.е. единственный способ - заменить все символы старше &HC0 вопросиками.
Изображение

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 24.02.2005 (Чт) 17:27

Я то чета подумал, что win1252 тоже русская, (стыд мне и позор), что не есть правильно совсем :oops: Опомнився, что же сие такое, беру свои слова обратно... Как же ты ее переведешь, если там только инглиш и цифры одинаковые, ну служебные еще...
tyomitch писал(а):Т.е. единственный способ - заменить все символы старше &HC0 вопросиками.

А зачем вопросиками? Оно и так прекрасно переведется в кракозяблики. Но кракозяблики можно опять назад перевести, а вот как ты вопросики переводить обратно будешь... Можно конечно, но сложно.

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

Сообщение Inferno » 24.02.2005 (Чт) 18:48

Вот нашел кое что.
Код: Выделить всё
Option Explicit
Public 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
Public 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
Public Const MB_PRECOMPOSED = &H1


Enum Charset
    Default = 0
    OEM_Russian = 866
    OEM_Korean = 949
    Windows_1251 = 1251
    Windows_1252 = 1252
    Korean_Johab = 1361
    Mac_Korean = 10003
    Mac_Cyrillic = 10007
    Korean_Extend = 20833
    KOI_8R = 20866
    KOI_8U = 21866
    ISO_2022_Korean = 50225
    Korean_Extended = 50933
    EUC_Korean = 51949
    UTF_7 = 65000
    UTF_8 = 65001
End Enum

Public 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

    lngLength = Len(strString)
    strWideChar = String$(lngLength * 2, Chr(0))
    strReturn = String$(lngLength * 2, Chr(0))
    lngReturnLength = MultiByteToWideChar(FromCharset, MB_PRECOMPOSED, strString, lngLength, strWideChar, lngLength)
    WideCharToMultiByte ToCharset, 0, strWideChar, lngReturnLength, strReturn, lngLength * 2, ByVal 0, 0
    ConvertCharset = Left$(strReturn, lngReturnLength)

End Function




Как отсюда видно бьюсь с корейским языком. С путями и подобной ерундой разобрался. А как файл прицепить не знаю. Название файла записано в текстовом файле. Я его оттуда и вытаскиваю.
Кстати заметил интересную вещь FSO говорит что файл существует, а picturebox утверждает, что неправильный путь.

Самое интересное, что если делаю поддержку корейского языка виндой все работает. В общем-то не хотелось бы так винду коверкать.


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

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

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

    TopList