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

  • Автор темы SSVSS
  • Дата начала
Статус
Закрыто для дальнейших ответов.
S

SSVSS

Гость
#1
Кто знает, посоветуйте!

Как вставить текст в кодировке 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.
 

Gamlet

Well-Known Member
08.01.2007
525
0
Зеленоград
#2
Переводи в нужную кодировку. Завтра функцию кину. Или возьми контрол unicode textbox(в инете есть)
 

Gamlet

Well-Known Member
08.01.2007
525
0
Зеленоград
#3
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
 
N

negrem

Гость
#4
Может я что то неправильно делаю
Выдает ошибку Саб или функции не определены GetACP

Может кто чем поможет советом?
 
Статус
Закрыто для дальнейших ответов.