?Asc(ChrW(&H03A9))

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

?Asc(ChrW(&H03A9))

Сообщение arthur2 » 15.12.2008 (Пн) 8:18

Мне нужно узнать Ascii-код уникодной буквы.
Скажем, греческая омега Ω: s = ChrW(&H03A9)

Простое Asc(s) не помогает - даёт ответ &H3F то есть, "?".

Сразу подглядываем в ответ и узнаём, что чтобы отобразить греческую омегу в Ascii, нужно установить font.charset=161 и вывести chr(&HD9)

Итак, из уникодакода омеги &H03A9 нужно получить Ascii-код &HD9 (хорошо бы ещё и Charset выяснить, но это уже не обязательно - условно говоря, я его заранее знаю)

На сколько я понимаю, искать нужно именно во втором байте, то есть из &HA9 нужно получить &HD9 Осталось понять, как?
Артур
 
   

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

Re: ?Asc(ChrW(&H03A9))

Сообщение tyomitch » 15.12.2008 (Пн) 8:47

WideCharToMultiByte
Изображение

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: ?Asc(ChrW(&H03A9))

Сообщение Andrey Fedorov » 15.12.2008 (Пн) 16:34

arthur2 писал(а):На сколько я понимаю, искать нужно именно во втором байте, то есть из &HA9 нужно получить &HD9 Осталось понять, как?


Код: Выделить всё
Dim m() As Byte
   
m = ChrW(&H3A9)
   
Debug.Print Hex(m(1)) & " " & Hex(m(0))
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

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

Re: ?Asc(ChrW(&H03A9))

Сообщение tyomitch » 15.12.2008 (Пн) 17:37

Andrey, каким боком твой код относится к вопросу? :?
Изображение

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: ?Asc(ChrW(&H03A9))

Сообщение arthur2 » 15.12.2008 (Пн) 21:25

tyomitch

Методом тыка узнал греческую кодовую страницу: 1253
Код: Выделить всё
Dim s As String, t As String
s = ChrW(&H39A)
t = " "
WideCharToMultiByte 1253, 0, s, 1, t, 1, "", 0
Debug.Print Hex(AscW(t))

Преобразуется в тот же самый &h3f (то есть, вопросик "?"). Так же, как и простое asc(s) :(

Что я делаю не так?
Артур
 
   

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

Re: ?Asc(ChrW(&H03A9))

Сообщение tyomitch » 15.12.2008 (Пн) 22:38

arthur2 писал(а):Методом тыка узнал греческую кодовую страницу: 1253

Поздравляю, а доку не пробовал открыть? http://msdn.microsoft.com/en-us/library/ms776446(VS.85).aspx

arthur2 писал(а):
Код: Выделить всё
Dim s As String, t As String
s = ChrW(&H39A)
t = " "
WideCharToMultiByte 1253, 0, s, 1, t, 1, "", 0
Debug.Print Hex(AscW(t))

Преобразуется в тот же самый &h3f (то есть, вопросик "?"). Так же, как и простое asc(s) :(

Что я делаю не так?

Объявляешь как ByVal As String, скорее всего.

Код: Выделить всё
Private Declare Function WideCharToMultiByte Lib "kernel32" (ByVal CodePage As Long, _
ByVal dwFlags As Long, lpWideCharStr As Any, ByVal cchWideChar As Long, _
lpMultiByteStr As Any, ByVal cchMultiByte As Long, ByVal lpDefaultChar As Long, _
lpUsedDefaultChar As Any) As Long

Sub Main()
    Dim b As Byte
    WideCharToMultiByte 1253, 0, &H39A, 1, b, 1, 0, ByVal 0&
    MsgBox Hex(b)
End Sub
Изображение

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: ?Asc(ChrW(&H03A9))

Сообщение arthur2 » 15.12.2008 (Пн) 23:58

tyomitch
Спасибо! Но увы, с ответом не сходится :( - возвращает &hca а это "К" (с установленным font.charset=161)

Поздравляю, а доку не пробовал открыть?

Ещё раз спасибо - информация ценная! Но в данном случае метод тыка мне нужнее - получаю кодовую страницу из текущей раскладки клавиатуры через LocalInfo, а из неё уже и нужный charset через TranslateCharsetInfo
Артур
 
   

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

Re: ?Asc(ChrW(&H03A9))

Сообщение tyomitch » 16.12.2008 (Вт) 0:03

arthur2 писал(а):tyomitch
Спасибо! Но увы, с ответом не сходится :( - возвращает &hca а это "К" (с установленным font.charset=161)

Горе луковое, у тебя в первом посте &H3A9 (омега), а в последнем &H39A (каппа). Выбирай сам, которая из них тебе нужна.
Изображение

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: ?Asc(ChrW(&H03A9))

Сообщение arthur2 » 16.12.2008 (Вт) 0:12

:oops:

Туплю... Прошу прощения!

Ура, заработало! Спасибо огромное!

А возможно (ну пусть не по одному, а по большинству символов) узнать, на каком именно языке уникодный текст?
Артур
 
   

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

Re: ?Asc(ChrW(&H03A9))

Сообщение tyomitch » 16.12.2008 (Вт) 0:16

arthur2 писал(а):А возможно (ну пусть не по одному, а по большинству символов) узнать, на каком именно языке уникодный текст?

Перевести в каждую из возможных кодовых страниц, и посчитать, где выйдет меньше всего вопросиков.
Изображение

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: ?Asc(ChrW(&H03A9))

Сообщение arthur2 » 16.12.2008 (Вт) 0:21

Перевести в каждую из возможных кодовых страниц, и посчитать, где выйдет меньше всего вопросиков.

Да уж... Мрачный способ :) Впрочем, работать будет и хорошо

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

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

Re: ?Asc(ChrW(&H03A9))

Сообщение tyomitch » 16.12.2008 (Вт) 9:09

Изображение

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: ?Asc(ChrW(&H03A9))

Сообщение arthur2 » 16.12.2008 (Вт) 10:47

tyomitch
Спасибо! :D
Артур
 
   


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

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

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

    TopList