:: Visual Foxpro, Foxpro for DOS
Как легко сохранить файл в кодировке UTF-8
ZenTigra
Автор

Сообщений: 514
Дата регистрации: 03.12.2004
Нужно сохранить текстовый файл в кодировке UTF-8 - как, это попроще сделать?


PS.Про то как сохранять информацию в файл, я в курсе, вопрос о перекодировке...
Ratings: 0 negative/0 positive
Re: Как легко сохранить файл в кодировке UTF-8
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Есть разные пути. Если речь идёт только о кириллице, то можно самому написать перекодировку. На форуме точно есть темы про это.

Также можно воспользоваться какой-нибудь консольный утилитой. Сейчас под рукой нет, но помнится, что использовал в одном из своих проектов. В командной строке указывается входной файл с ключами. На выходе файл в формате UTF-8.

С форматом UTF-8 тоже есть некоторые нюансы. В заголовке записывается поизнак (забыл, как он сокращённо называется) того, в какой последовательности читать младший и старший байт символа в формате UTF-8.



Исправлено 2 раз(а). Последнее : Simple777, 07.02.21 12:57
Ratings: 0 negative/0 positive
Re: Как легко сохранить файл в кодировке UTF-8
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
help strtofile()
STRTOFILE(cExpression, cFileName [, lAdditive | nFlag])

nFlag 4 Write UTF-8 Byte Order Mark (BOM) EF BB BF at the beginning of file. cExpression is assumed to be UTF-8, therefore no translation is performed. The file is overwritten.
Ratings: 0 negative/0 positive
Re: Как легко сохранить файл в кодировке UTF-8
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
StrConv()


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Как легко сохранить файл в кодировке UTF-8
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Вона оно как в VFP.
Ratings: 0 negative/0 positive
Re: Как легко сохранить файл в кодировке UTF-8
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
Simple777
На форуме точно есть темы про это.

Для FPD (и ранних версий VFP): foxclub.ru \m/

Simple777
Вона оно как в VFP.

;)


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive
Re: Как легко сохранить файл в кодировке UTF-8
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Посмотрел. [sm128]

Только там про BOM нету ничего... :al:

И FPD LPARAMETERS не разумеет. Пришлось PARAMETERS написать. [attachment 34765 bv.gif]

А в целом преобразует во что-то.



Исправлено 2 раз(а). Последнее : Simple777, 08.02.21 13:27
Ratings: 0 negative/0 positive
Re: Как легко сохранить файл в кодировке UTF-8
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
Simple777
А в целом преобразует во что-то.

Фигасе. Оно работало у меня сколько-то лет. На FPD. И никаких бим-бомов не надо было. Формировались XML-файлы для налоговой отчетности.
А LPARAMETERS чисто "для совместимости" прилепил. Пива про это вроде сказал.
В принципе с VFP6 юникоды и так уже поддерживаются. С VFP7 точно. А начальными версиями уже наверно 100 лет никто не пользуется. В отличие от FPD. Как ни странно. Казалось бы. [sm128]
Впрочем, в чем-то оно действительно лучше было начальных версий VFP.


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)




Исправлено 1 раз(а). Последнее : Crispy, 08.02.21 14:24
Ratings: 0 negative/0 positive
Re: Как легко сохранить файл в кодировке UTF-8
akvvohinc

Сообщений: 4219
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
Оно работало у меня сколько-то лет.
Если представить себе преобразование "большого" текста, то в плане скорости ты выбрал вариант, наиболее далекий от оптимального.
Даже не знаю, что может быть хуже STUFF() в этом случае.
Ratings: 0 negative/0 positive
Re: Как легко сохранить файл в кодировке UTF-8
IPUA

Сообщений: 45
Дата регистрации: 21.04.2006
Crispy
Simple777
На форуме точно есть темы про это.

Для FPD (и ранних версий VFP): foxclub.ru \m/

Simple777
Вона оно как в VFP.

;)

А обратной (UTF-8 TO 1251) для ранних версий нету? Нужно для VFP 6 где StrConv() заканчивается цифрой 8 во втором параметре
Ratings: 0 negative/0 positive
Re: Как легко сохранить файл в кодировке UTF-8
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Через АПИ функции можно WideCharToMultiByte и MultiByteToWideChar. "кодовая страница utf8" это #define CP_UTF8 65001


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Как легко сохранить файл в кодировке UTF-8
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
akvvohinc
Если представить себе преобразование "большого" текста, то в плане скорости ты выбрал вариант, наиболее далекий от оптимального.
Даже не знаю, что может быть хуже STUFF() в этом случае.

Что в твоем понимании "большой"? В налоговой отчетности было максимум пара тысяч строк. Миллионов там в принципе не может бывать - как минимум их сервер бы сдох на таком файле. Все делалось за доли секунды, даже не измерял, не было нужды. Миг какой-то мизерный. И повторю все это делалось в FPD2.6, где каких-то иных возможностей не сказать, чтобы так уж много. Их попросту нет. И таки да - оно таки работало без никаких проблем. Что всегда как бы убивающий все красивые теории факт.
Пример же привел чисто для Симплы, как пользующего FPD для своих нужд. Мне же оно в принципе вообще никак давно уже не актуально.


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive
Re: Как легко сохранить файл в кодировке UTF-8
akvvohinc

Сообщений: 4219
Откуда: Москва
Дата регистрации: 11.11.2008
Crispy
Что в твоем понимании "большой"? В налоговой отчетности...
Что-то я не заметил в описании ничего, что касалось бы "налоговой отчетности"
В решениях процедура позиционируется как
Цитата:
Процедура преобразования строки символов из 1251 (или 866) кодовой страницы в UTF-8r - для использования при создании XML-файлов. Для FPD и тех версий VFP, где такая функция еще отсутствует.

Почему я не могу использовать её для пребразования мегабайтных файлов? Ты это не запрещал.

Цитата:
И повторю все это делалось в FPD2.6, где каких-то иных возможностей не сказать, чтобы так уж много. Их попросту нет.
Такие возможности есть - читаешь символ исходной строки и добавляешь преобразованный к результирующей строке.
Ratings: 0 negative/0 positive
Re: Как легко сохранить файл в кодировке UTF-8
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
akvvohinc
Такие возможности есть - читаешь символ исходной строки и добавляешь преобразованный к результирующей строке.
Если не делать это через конкретно фоксовые строки (а, к примеру, через файлы - fopen/fread/fwrite), то будет вполне шустро для мегабайтных объёмов и на FPD. Для перфекционистов - нарисовать на си plb или как там "расширения" для фокса назывались... Хотя нынче это будет тот ещё квест - найти library construction kit с сишным компилятором нужной версии...
Для VFP (любой версии) можно задействовать WinAPI - он, насколько я в курсе, с буферами в памяти работает аккуратно и эффективно - не копируя туда-сюда строки и их части по 100500 раз.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Как легко сохранить файл в кодировке UTF-8
Каратаев

Сообщений: 3977
Откуда: Алматы
Дата регистрации: 04.12.2001
Как вариант, у меня при создании файла сразу строки, которые в него пишу, перекодируются. Например:
IF llCreatedFile = .T.
lcString = STRCONV(lcString,9)
FPUTS(InHandleFileCSV, lcString) && Запишем строку
ENDIF
После чего, этот файл уже в кодировке utf-8.


------------------
Никогда не бывает настолько плохо, чтобы не могло быть еще хуже.
Ratings: 0 negative/0 positive
Re: Как легко сохранить файл в кодировке UTF-8
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
akvvohinc
Такие возможности есть - читаешь символ исходной строки и добавляешь преобразованный к результирующей строке.

Зачем тебе непременно прям аж так надо грузить что-то гигантское в саму функцию?!
Оно в FPD же и не загрузится по любому. Там ведь предел строки совсем мизерный был - это тебе не VFP!
Данную же функцию абсолютно без проблем можно применять например для построчного считывания-вставки для больших файлов. (если уж кому-то приспичило)
В чем проблемы-то?
Т.е. никто этого и не запрещает, чтобы:
Igor Korolyov
fopen/fread/fwrite), то будет вполне шустро для мегабайтных объёмов и на FPD.


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive
Re: Как легко сохранить файл в кодировке UTF-8
lulgu

Сообщений: 1838
Дата регистрации: 30.11.2016
За полтора десятка лет ничего не изменилось:
www.sql.ru
Ratings: 0 negative/0 positive
Re: Как легко сохранить файл в кодировке UTF-8
akvvohinc

Сообщений: 4219
Откуда: Москва
Дата регистрации: 11.11.2008
Crispy
Оно в FPD же и не загрузится по любому. Там ведь предел строки совсем мизерный был - это тебе не VFP!
Ну, если строка в 16 мегов - это мизер, то ты прав.
Ratings: 0 negative/0 positive
Re: Как легко сохранить файл в кодировке UTF-8
leonid

Сообщений: 3204
Откуда: Рига
Дата регистрации: 03.02.2006
Crispy
Оно в FPD же и не загрузится по любому. Там ведь предел строки совсем мизерный был - это тебе не VFP!

[attachment 34778 fpd.jpg]
Ratings: 0 negative/0 positive
Re: Как легко сохранить файл в кодировке UTF-8
of63

Сообщений: 25254
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
А как они в 640к переделывали строки, например UTF --> ASCII, там, при буферизаци, надо не прозевать границу при 2-х и более байтных "символах". FPD (и VFP) сделали великие ребята, не побоюсь этого слова, было всё по честному... ну, не нарывался на косяки (хотя хотелки тогда были не шибко сложные и емкие, при 5-10 МБ винте ) )
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 23 Joys  (Гостей: 22)

© 2000-2024 Fox Club 
Яндекс.Метрика