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

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

Изучаю WinAPI-функцию MultiByteToWideChar() вроде оно по описанию, но пока работать не хочет.
...
Рейтинг: 0 / 0
Как прочитать UTF-8 в VFP6
    #35458858
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашел тут пример, только там небольшая ошибка была - лишнее в строке конечной не обрезалось. Вот так работает как надо:
Код: 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
Как прочитать UTF-8 в VFP6
    #35458879
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выложу еще свой облегченный вариант (только 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
5 сообщений из 5, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как прочитать UTF-8 в VFP6
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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