Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как прочитать UTF-8 в VFP6 / 5 сообщений из 5, страница 1 из 1
29.07.2008, 15:24
    #35458171
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как прочитать UTF-8 в VFP6
Привет всем!

Подсунули тут файлик с UTF-8 и говорят что надо чтоб грузился
strconv(lcS, 11) в 6-ке нету :(
Решение нужно средствами фокса, пока вижу только вариант самому конвертер писать.
...
Рейтинг: 0 / 0
29.07.2008, 15:52
    #35458289
Hel!Riser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как прочитать UTF-8 в VFP6
если работа с сикелным сервером есть у приложения - попробовать ему слить данные и вернуть взад нормательный результат
...
Рейтинг: 0 / 0
29.07.2008, 15:55
    #35458302
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как прочитать UTF-8 в VFP6
Hel!Riserесли работа с сикелным сервером есть у приложения - попробовать ему слить данные и вернуть взад нормательный результат
C DBF. SQL-сервера нет.

Изучаю WinAPI-функцию MultiByteToWideChar() вроде оно по описанию, но пока работать не хочет.
...
Рейтинг: 0 / 0
29.07.2008, 18:52
    #35458858
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как прочитать UTF-8 в VFP6
Нашел тут пример, только там небольшая ошибка была - лишнее в строке конечной не обрезалось. Вот так работает как надо:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
? TranslationCP( 65001 ,  1251 , lcS) &&  65001  -  UTF- 8  

Function TranslationCP
Lparameters tnCurrentCodePage, tnNewCodePage, tcString 

Declare Integer IsValidCodePage in WIN32API ;
    integer nCodePage
Declare Integer MultiByteToWideChar in WIN32API ;
    integer CodePage,;
    integer Flags,;
    string MultyByteStr,;
    integer MultiByteStrLen,;
    string @ WideCharStr,;
    integer WideCharStrLen

Declare Integer WideCharToMultiByte in WIN32API ;
    integer CodePage,;
    integer Flags,;
    string MultyByteStr,;
    integer MultiByteStrLen,;
    string @ WideCharStr,;
    integer WideCharStrLen,;
    integer ,;
    integer

If IsValidCodePage(tnCurrentCodePage) =  0  or IsValidCodePage(tnNewCodePage) =  0 
    Return NULL
EndIf

Local lcWideCharBuf, lcMultiByteBuf, lnLen
lcWideCharBuf = Replicate(Chr( 0 ), Len(tcString) *  2  +  2 )
lcMultiByteBuf = Replicate(Chr( 0 ), Len(tcString) +  1 )

MultiByteToWideChar(tnCurrentCodePage,  0 , tcString + chr( 0 ) + chr( 0 ), - 1 , @lcWideCharBuf, Len(tcString) +  1 )

lnLen = WideCharToMultiByte(tnNewCodePage,  0 , lcWideCharBuf , - 1  ,@lcMultiByteBuf ,Len(lcMultiByteBuf) , 0  , 0 )
if lnLen >  0 
	lcMultiByteBuf = left(lcMultiByteBuf, lnLen -  1 )
endif

Return lcMultiByteBuf
...
Рейтинг: 0 / 0
29.07.2008, 19:03
    #35458879
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как прочитать UTF-8 в VFP6
Выложу еще свой облегченный вариант (только UTF-8 в 1251), может кому пригодится:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Function FromUTF8
Lparameters tcString 

Declare Integer MultiByteToWideChar in WIN32API ;
    integer CodePage,;
    integer Flags,;
    string MultyByteStr,;
    integer MultiByteStrLen,;
    string @ WideCharStr,;
    integer WideCharStrLen

Local lcWideCharBuf, lnLen, lcRet

lcWideCharBuf = Replicate(Chr( 0 ), Len(tcString) *  2  +  2 )

lnLen = MultiByteToWideChar( 65001 ,  0 , tcString + chr( 0 ) + chr( 0 ), - 1 , @lcWideCharBuf, Len(tcString) +  1 )

if lnLen =  0 
	lcRet = ''
else
	lcRet = strconv(left(lcWideCharBuf, (lnLen -  1 ) *  2 ),  6 )
endif

Return lcRet
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как прочитать UTF-8 в VFP6 / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]