1. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление

Unicode в контролах Vb6.0

Тема в разделе "Visual Basic", создана пользователем SSVSS, 22 фев 2009.

Статус темы:
Закрыта.
  1. SSVSS

    SSVSS Гость

    Репутация:
    0
    Кто знает, посоветуйте!

    Как вставить текст в кодировке Unicode в контрол VB?

    Имеется файл source_unicode.txt, в котором содержится текст в кодировке Unicode.
    Проблему считывания корректных символов в память VB я уже решил.
    Убедился в том, что символы хранятся в памяти VB правильно.
    Осталась проблема вывода этих символов на контрол формы VB6.0 (Listbox и Textbox).

    Проблемных символов всего два: это a и o с умляутами.

    На всякий случай приведу код, считывающий этот самый текст:
    Код:
    Dim S As String 
    Dim F As Integer 
    
    Private Sub Form_Load() 
    
    S = LoadUnicodeFile(App.Path & "\source_unicode.txt", 1035) 
    Text1.Text = S 
    MsgBox AscW(Mid(Text1.Text, 1, 1)) 
    MsgBox AscW(Mid(S, 1, 1)) 
    
    End Sub 
    
    Public Function LoadUnicodeFile(FileName As String, Optional LocaleID As Long = 1035) As String 
    
    F = FreeFile 
    Open FileName For Binary Access Read As F 
    S = Space(LOF(F) - 2) 
    Seek #F, 3 
    Get #F, , S 
    Close #F 
    LoadUnicodeFile = StrConv(S, vbFromUnicode, LocaleID) 
    
    End Function
    Поставил в файле source_unicode.txt первым символом "а" с умляутом;
    Первый Msgbox мне выдал "97" ("а"), а второй - "228" ("а" с умляутом)

    То есть в памяти VB хранит как и надо, в Юникоде, а вот в Textbox вставляет простые буквы a и o, без умляутов, то есть преобразовывает их в ANSI.
     
  2. Gamlet

    Gamlet Well-Known Member

    Репутация:
    0
    Регистрация:
    8 янв 2007
    Сообщения:
    525
    Симпатии:
    0
    Переводи в нужную кодировку. Завтра функцию кину. Или возьми контрол unicode textbox(в инете есть)
     
  3. Gamlet

    Gamlet Well-Known Member

    Репутация:
    0
    Регистрация:
    8 янв 2007
    Сообщения:
    525
    Симпатии:
    0
    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 DecodeUTF8(ByVal cnvUni As String) As String
    If cnvUni = vbNullString Then Exit Function
    DecodeUTF8 = AToW(WToA(cnvUni, CP_ACP), CP_UTF8)
    End Function
     
  4. negrem

    negrem Гость

    Репутация:
    0
    Может я что то неправильно делаю
    Выдает ошибку Саб или функции не определены GetACP

    Может кто чем поможет советом?
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей