UTF-8 to 1251 | |
---|---|
Simple777 Автор Сообщений: 33855 Дата регистрации: 05.11.2006 |
Нашел на просторах инета вот такую шнягу:
Положим, я открываю текстовый файл в кодировке UTF-8, содержащий "обычные" символы до ASCII 127, а также и кириллицу. Символов из каких-либо других языков во входном файле не будет. Как наиболее эффективно переделать приведенную таблицу под UDF для FPD? Видимо, надо считывать сначала один байт во входном файле, и если это будет chr(208) или chr(209), то потом проверить значение следующего байта? И если эта пара встретится в перекодировочной таблице, то заменить 2 байта во входном файле на один байт в выходном файле? |
Re: UTF-8 to 1251 | |
---|---|
sphinx Сообщений: 31180 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
Может поможет такой код на Visual Basic:
www.vbnet.ru Я так понял, что кодировку без парсинга всего текста можно поменять сразу через ADODB.Stream excelvba.ru Что-то вроде..
------------------ "Veni, vidi, vici!"(с) Исправлено 3 раз(а). Последнее : sphinx, 22.03.16 20:35 |
Re: UTF-8 to 1251 | |
---|---|
Simple777 Автор Сообщений: 33855 Дата регистрации: 05.11.2006 |
Нет. Никаких внешних средств использовать не надо в данном случае. У юзеров может быть установлено что угодно, а мне надо будет конвертировать в моей программе файлы, которые они будут получать из другого внешнего приложения. Тут вполне сгодится UDF-функция на FPD. Как ее написать "в лоб" я вижу. Но как показали обсуждения моих UDF-функций здесь, даже "обнять и заплакать" будет мало.
Вот поэтому и спрашиваю совета - как сделать UDF так, чтобы функция работала быстро и без глюков? |
Re: UTF-8 to 1251 | |
---|---|
sphinx Сообщений: 31180 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
Подправил функцию...
------------------ "Veni, vidi, vici!"(с) |
Re: UTF-8 to 1251 | |
---|---|
Simple777 Автор Сообщений: 33855 Дата регистрации: 05.11.2006 |
Извиняюсь, канешна...
Но в FPD 2.6 нет CreateObject() |
Re: UTF-8 to 1251 | |
---|---|
sphinx Сообщений: 31180 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
Вот реализация через API-функции:
------------------ "Veni, vidi, vici!"(с) |
Re: UTF-8 to 1251 | |
---|---|
sphinx Сообщений: 31180 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
Есть еще API-функция CPCONVERT:
------------------ "Veni, vidi, vici!"(с) |
Re: UTF-8 to 1251 | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Написать её на Си. Скомпилировать в plb или чего там для FPD было... 1) Начальная отладка. 2) Набор тестов (вход, ожидаемый выход, сравнение - под все "тонкие" случаи). Алгоритм описан в RFC, да даже в википедии - ничего супер-сложного в нём нету, хотя и нужны битовые операции. И про BOM не следует забывать. Делать ориентируясь под "Символов из каких-либо других языков во входном файле не будет." - это значит делать сразу с глюками. Хочешь - делай, конечно, но не упоминай потом про "без глюков" ------------------ WBR, Igor |
Re: UTF-8 to 1251 | |
---|---|
Simple777 Автор Сообщений: 33855 Дата регистрации: 05.11.2006 |
Обсуждение как на форуме, так и в личке таки сподвигло на написание нижеприводимого опуса. По крайней мере, при тестировании выходной файл формируется корректно. Для проверки использовалась строка из всех букв алфавита кириллицы (большие и маленькие буквы) вперемежку с цифрами, латиницей и специальными символами. Также проверялся и реальный файл.
Собственно, преобразованию подвергаются только те символы, которые с большой вероятностью являются 2-байтным представлением кириллицы в UTF-8. Все же остальные символы остаются в неизменном виде. Иными словами, если вдруг попадется некая кракозябра, то она так и перейдет в выходной файл. В данном же конкретном случае вероятность встречи кракозябры во входном файле примерно такая же, как и встреча с динозавром на улице, т.е 1/2 BOM такой. Сначала идет первый байт для 2-байтной кодировки, а потом второй.
Далее utf_866.prg
P.S. Название топика теперь кагбы и не совсем соответствует - конечной целью было таки перегнать данные из UTF-8 в кодовую страницу 866. Исправлено 4 раз(а). Последнее : Simple777, 23.03.16 09:10 |
Re: UTF-8 to 1251 | |
---|---|
alex; Сообщений: 2855 Откуда: Москва Дата регистрации: 23.11.2004 |
Фигасе,
вы знаете сколько символов в юникоде? или 1251 тож юникод - чот подзабыл Исправлено 1 раз(а). Последнее : alex;, 23.03.16 09:56 |
Re: UTF-8 to 1251 | |
---|---|
Simple777 Автор Сообщений: 33855 Дата регистрации: 05.11.2006 |
Это конвертер только для кириллицы. Остальные языки не обрабатываются. Да и задачи такой не было у меня. Входные файлы будут содержать только символы ASC 0-127 и кириллицу.
Исправлено 2 раз(а). Последнее : Simple777, 23.03.16 10:16 |
Re: UTF-8 to 1251 | |
---|---|
alex; Сообщений: 2855 Откуда: Москва Дата регистрации: 23.11.2004 |
мне нравиться больше применение chr в BITTO?
Забыл млин ЗЫ Как-то chr использовалсяв api. Кароч, тов. модеры этот меседж нужна удалить PSS Не всю тему прочитал, сорри Исправлено 2 раз(а). Последнее : alex;, 23.03.16 10:54 |
Re: UTF-8 to 1251 | |
---|---|
alex; Сообщений: 2855 Откуда: Москва Дата регистрации: 23.11.2004 |
Я для перевода использовал чужую функцию
ЗЫ Млин, наверно,и этотмеседжнуно удалить, тк используется api |
Re: UTF-8 to 1251 | |
---|---|
Simple777 Автор Сообщений: 33855 Дата регистрации: 05.11.2006 |
Вот все горазды лысому предлагать расческу.
Речь идет только о FPD, и никаких VBA, VBS, WIn-api и прочих "ништяков" в наличии не предполагается. |
Re: UTF-8 to 1251 | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
По принятым в винапи соглашениям при переводе между разными кодовыми страницами если нет возможности найти нечто похожее (например псевдографика из 866 или те же "греческие" буквы в кириллицу 1251) то идёт замена "кракозябры" на "символ замены" - обычно это вопросительный знак. ------------------ WBR, Igor |
Re: UTF-8 to 1251 | |
---|---|
Crispy Сообщений: 18571 Дата регистрации: 16.05.2005 |
Так получилось же вроде все, почему не соответствует-то? Кстати в принципе не так уж сложно, как и в том моем примере (в решениях) об обратной конвертации, сделать не побайтовое, как у тебя, а тоже построчное преобразование. Вот таким образом:
Получая на выходе аналогичное UTF-8 -> 866. Разумеется, лучше оформить все это как процедуру, просто передавая в нее параметрами имена файлов. При этом, если нет какого-нибудь особого смысла хранить файл в обеих кодировках, можно и вообще после закрытия обоих файлов просто перекопировать новый 866-файл вместо исходного, чтобы не путаться далее в именах и кодировках. Т.е. тогда достаточно передавать параметром только лишь одно имя исходного файла, а временный называть как-то типа tmp.txt и удалять в конце процедуры. В FPD в подобных случаях я обычно так всегда и делал. ------------------ В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) Исправлено 1 раз(а). Последнее : Crispy, 24.03.16 11:29 |
Re: UTF-8 to 1251 | |
---|---|
Simple777 Автор Сообщений: 33855 Дата регистрации: 05.11.2006 |
Да ежели в нашем селе я
|
Re: UTF-8 to 1251 | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Ога, чтобы на всякий случай ещё пару раз его переконвертировать, превратив в невосстановимое и нечитаемое нечто Особливо памятуя про любовь к отсутствию BOM в файлах - чтобы уж никто и не заподозрил даже, в UTF8 сей файл или уже нет ------------------ WBR, Igor |
Re: UTF-8 to 1251 | |
---|---|
Simple777 Автор Сообщений: 33855 Дата регистрации: 05.11.2006 |
Не, исходный файл я в таких случаях всегда сохраняю. У меня такой контингент юзеров, что они и "косяки" - две неразлучные вещи. Бывает, что происходит и довольно крутой разбор полетов. Покамест счет в мою пользу - в своих воротах "отстоял всухую". . Кстати, несколько раз оракловцам "задницу надрал" при разборках.
|
Re: UTF-8 to 1251 | |
---|---|
h.i.a. Сообщений: 4002 Откуда: Мурманск/Спб/Мск Дата регистрации: 18.11.2005 |
Добавлю свои пять копеек. Понадобилось по-быстрому разобрать с помощью VFP один лог, кириллица как оказалась в UTF-8.
В итоге получилось такое решение:
------------------ |
© 2000-2024 Fox Club  |