А в чём проблема?
Module('Windows API')
MultiByteToWideChar(UINT Codepage,DWORD dwFlags,ULong LpMultuByteStr, !
Long cbMultiByte, ULong LpWideCharStr,Long cchWideChar),RAW,DWord,PASCAL
WideCharToMultiByte(UINT Codepage,DWORD dwFlags,ULong LpWideCharStr,Long cchWideChar, !
ULong lpMultuByteStr, Long cbMultiByte, Ulong LpDefalutChar,LpBool lpUsedDefalutChar), !
Raw,DWord,Pascal
GETACP(),RAW,DWORD,PASCAL
End
If WideCharToMultiByte(GetACP(),0,Address(UnicodeText),BufSize,Address(Buffer),BufSize+1,0,0).
Buffer[BufSize+1]='<0>'
Cpage - кодовая страница (получается как Cpage=GetACP())
UnicodeText - адрес юникода (должен кончаться на <0,0>)
BufSize - размер выходного буфера ( половина от размера юникода)
Buffer - куда класть результат
If MultiByteToWideChar(GetACP(),0,Address(Buffer),BufSize,Address(UnicodeText),BufSize*2+2).
Buffer должен кончаться на '<0>'
А напоследок маленькая рутинка преобразования HTML-строки из Unicode в ASCII
Переменная S содержит содержимое некоторого HTML-файла в Юникоде АБ ... . После завершения она перекодирована в ASCII. Может быть, это и нужно?
Код: Выделить всё
ReplaceHex Routine ! Замена Unicode
Data
Loc:InPos Long
Loc:OutPos Long
Loc:Len Long
Loc:S1 String(1)
Code
Loc:InPos=1
Loc:OutPos=1
Loc:Len=Len(S)
Loop
If Loc:InPos>Loc:Len Then Break.
Loc:S1=S[Loc:InPos]
Case Loc:S1
Of '<0>'
Break
Of '&'
Loc:S1=S[Loc:InPos+1]
If Loc:S1='#'
I#=S[Loc:Inpos+2 : Loc:InPos+5]
If Inrange(I#,1040,1103)
Loc:S1=Chr(Val('А')+(I#-1040))
Elsif I#=1025
Loc:S1='Ё'
Elsif I#=1105
Loc:S1='ё'
Else
Loc:S1=''
End
S[Loc:OutPos]=Loc:S1
Loc:InPos+=7
Loc:OutPos+=1
Else
S[Loc:OutPos]=S[Loc:InPos]
Loc:InPos+=1
Loc:OutPos+=1
End
Else
S[Loc:OutPos]=S[Loc:InPos]
Loc:InPos+=1
Loc:OutPos+=1
End
End
S=Sub(S,1,Loc:OutPos-1)
Exit
--
C уважением
Yuri
Адрес:
yufil@mail.ru
Написал: ClaList(2)