универсальный конвертор текстовых файлов

Предыдущая тема Следующая тема Перейти вниз

универсальный конвертор текстовых файлов

Сообщение  Eric-S в Вт Дек 30, 2008 9:29 am

Вот. Написал. Исходники прилагаются. Проект по сути завершон.
Я конечно буду его ещё немного оптимизировать. Искать и выправлять баги. Добавлять новые функции.
А так... Оно уже есть. И оно работает.
Я уже юзаю его в других проектах.


универсальный конвертор текстовых файлов

Утилита предназначена для перекодировки текстовых файлов. Поддерживаются 37 простых (8-битовых) кодировок, и юникод.
utf-8, utf-16 le, utf-16 be, utf-32 le, utf-32 be.

Также умеет работать с html кодами (десятичными и шестнадцатеричными) и мнемониками. В обе стороны, кодирует и декодирует.

подробности в файле docs/!info.txt

Утилита uctf.exe полностью автономна и не нуждается в дополнительных файлах. Кодировки зашиты прямо в неё. Не использует системных функций.
Тоже самое касается библиотеки uctf.dll

Названия кодировок брал из названий файлов, в пакете nls ввзятого из linux.
Да и сами таблицы позаимствованны именно отуда.
Но вот теперь маленькая проблемс... Где взять альтернативные названия не знаю.
Есть какой-то стандарт iso... Может быть кто подскажет?
Мне ведь собственно нужна табличка в стиле

cp1251=cyrilic windows
iso xxx=cyrilic mac

Похожая проблемка с html мнемониками. Сейчас их добавил около сотни. Помниться, где-то когда-то попадалась мне их огромная таблица, но вот сейчас не помню где!
Если знаете новые, или у вас есть табличка... Напишите мне.

страница: http://eric50.narod.ru/uctf/index.html
По всем вопросам и предложениям пишите на eric-s@mail.ru или eric50@yandex.ru


Последний раз редактировалось: Eric-S (Сб Янв 03, 2009 9:00 pm), всего редактировалось 1 раз(а)

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 33
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: универсальный конвертор текстовых файлов

Сообщение  Eric-S в Ср Дек 31, 2008 12:35 am

Если я правильно понял, то с длиной основных буферов разобрался.
Покрайней мере тесты прошли успешно.
В конце файлов не появилось новых символов.
И символов в конце не потерялось.
А эти две пакости у меня были.
Перепроверил все индексы и привёл к единому (стандартному) пониманию.

А главное у меня теперь не выскакивает ошибок при перекодировании.

Ну, буду ещё тестить. Там вариантов-то много. Надеюсь, что к этим функциям больше не вернусь.

А теперь в плотную займусь библиотекой.

Вот такие у меня мысли, если кому интересно.

О подробностях, юзанья смотрите в файл !info.txt

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 33
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: универсальный конвертор текстовых файлов

Сообщение  tux в Ср Дек 31, 2008 11:09 am

Интересно, а вообще аналоги такой библиотеки существуют?
avatar
tux

Сообщения : 365
Дата регистрации : 2008-04-06
Возраст : 28
Откуда : Сибирь

Посмотреть профиль http://tux.nsk.ru/

Вернуться к началу Перейти вниз

Re: универсальный конвертор текстовых файлов

Сообщение  Eric-S в Ср Дек 31, 2008 11:37 am

Аналоги... По моему нет. Они либо входят в операционку, напр windows. Причём ещё хрен докапаешься.
Знаю есть в qt, похожии функции.

В какой-то мере iconv являеться аналогом, но имхо она сделано криво и кажись не умеет работать с файлами.

Есть юниксовая утилитка recode, но она кажись заброшена. Судя по описанию, у неё функционала немного больше.

Но я не собираюсь пока замораживать проект. И вообще задачи были другие.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 33
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: универсальный конвертор текстовых файлов

Сообщение  diakin в Пт Апр 10, 2009 12:42 pm

Вот еще можно добавить

Код:

'*****************************************
' BASE64 encode
Function RQBASE64Encode(s As String) As String
Dim lenStr As Long, endPos As Long, lastChars As Long, l As Long, i As Long
dim cBASE64 as string
cBASE64=""
dim b64(63) As String
dim b256(255) As Long

For i = 0 To 63 Step 1
   b64(i) = Mid$(Base64Table, i + 1, 1)
   b256(Asc(b64(i))) = i
Next

lenStr = Len(s)
lastChars = lenStr Mod 3
endPos = lenStr - lastChars

For i = 1 To endPos Step 3
   l = CLng(AscB(Mid$(s, i, 1))) * 65536 + CLng(AscB(Mid$(s, i + 1, 1))) * 256 + CLng(AscB(Mid$(s, i + 2, 1)))
   cBASE64 = cBASE64 & b64(l \ 262144) & b64((l \ 4096) Mod 64) & _
   b64((l \ 64) Mod 64) & b64(l Mod 64)
Next

Select Case lastChars
Case 1
   l = CLng(AscB(Right$(s, 1))) * 16
   cBASE64 = cBASE64 & b64((l \ 64) Mod 64) & b64(l Mod 64) & "=="
Case 2
   l = CLng(AscB(Mid$(s, lenStr - 1, 1))) * 1024 + CLng(AscB(Right$(s, 1))) * 4
   cBASE64 = cBASE64 & b64((l \ 4096) Mod 64) & _
   b64((l \ 64) Mod 64) & b64(l Mod 64) & "="
End Select
result=cBASE64

End Function


'*****************************************
' BASE64 decode
Function RQBASE64Decode (stxt As String) As String
Dim lenStr As Long, endPos As Long, lastChars As Long, l As Long, i As Long
dim RQBASE64E as string
RQBASE64E=""
dim b64(63) As String
dim b256(255) As Long


For i = 0 To 63 Step 1
   b64(i) = Mid$(Base64Table, i + 1, 1)
   b256(Asc(b64(i))) = i
Next

lenStr = Len(stxt)
If Right$(stxt, 2) = "==" Then
   lenStr = lenStr - 2
Else
   If Right$(stxt, 1) = "=" Then lenStr = lenStr - 1
End If

lastChars = lenStr Mod 4
endPos = lenStr - lastChars
For i = 1 To endPos Step 4
   l=b256(Asc(Mid$(stxt,i,1)))*262144+b256(Asc(Mid$(stxt,i+1,1)))*4096+b256(Asc(Mid$(stxt,i+2,1)))*64+_
   b256(Asc(Mid$(stxt,i+3,1)))
   RQBASE64E = RQBASE64E + Chr$(l \ 65536) & Chr$((l \ 256) Mod 256) & Chr$(l Mod 256)
Next i

Select Case lastChars
Case 2
   l = b256(Asc(Mid$(stxt, lenStr - 1, 1))) * 1024 + b256(Asc(Mid$(stxt, lenStr, 1))) * 16
   RQBASE64E = RQBASE64E & Chr$(l \ 256)
Case 3
   l = (b256(Asc(Mid$(stxt, lenStr - 2, 1))) * 4096 + b256(Asc(Mid$(stxt, lenStr - 1, 1))) * 64 +_
   b256(Asc(Mid$(stxt, lenStr, 1)))) \ 4
   RQBASE64E = RQBASE64E & Chr$(l \ 256) & Chr$(l Mod 256)
End Select
result=RQBASE64E

End Function

diakin

Сообщения : 37
Дата регистрации : 2009-04-06
Откуда : С-Петербург

Посмотреть профиль http://miraxem.com

Вернуться к началу Перейти вниз

Re: универсальный конвертор текстовых файлов

Сообщение  diakin в Пт Апр 10, 2009 12:44 pm

Ну и прочие почтовые quoted printable
Subject: =?windows-1251?Q?=D2=E5=EA=F3=F9=E8=E5_?==?windows-1251?Q?=F1=E4=E5=EB=EA=E8?=: EUR GBP JPY- =?windows-1251?Q?=E2=ED=E5_?==?windows-1251?Q?

еще примеры
Subject: =?windows-1251?Q?Re: Re: Íàïîìèíàíèå î ïð?=
Subject: [OBORONA-SPAM] =?koi8-r?B?8sHT09nMy8Eg8M/S1MHMwSDNwdvJzs/T1NLPxc7J0SDP1CAyOS4wMi4yMDA4?=
Subject: =?utf-8?B?UmU6INCR0YPQvNCw0LPQsCDQv9C+0LTRgtCy0LXRgNC20LTQsNGO0YnQsNGP?==?utf-8?B?INC70LjRhtC10L3Qt9C40Y4u?=
Subject: =?windows-1251?B?0e/g7CDt4CBwaHBCQg==?=
Subject: =?koi8-r?Q?Re=5B4=5D=3A_=E9=DD=D5_=CC=C0=C4=C5=CA_=D3_=D0=D2=CF=C5=CB=D4?=

diakin

Сообщения : 37
Дата регистрации : 2009-04-06
Откуда : С-Петербург

Посмотреть профиль http://miraxem.com

Вернуться к началу Перейти вниз

Re: универсальный конвертор текстовых файлов

Сообщение  Eric-S в Пт Апр 10, 2009 1:55 pm

Спасибо! Сейчас посмотрим.
cp1251 и koi 8 поддерживает.
Надо бы конечно добавить псевдонимов, ну да я их всё равно не знаю.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 33
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: универсальный конвертор текстовых файлов

Сообщение  diakin в Пт Апр 10, 2009 3:43 pm

Eric-S пишет:Спасибо! Сейчас посмотрим.
cp1251 и koi 8 поддерживает.
Надо бы конечно добавить псевдонимов, ну да я их всё равно не знаю.

Псевдонимы это для Code Pages?
Code Page Identifiers
Identifier Name
037 IBM EBCDIC - U.S./Canada
437 OEM - United States
500 IBM EBCDIC - International

http://www.datamystic.com/textpipe/htmlhelp/conversion%20filters/codepages.htm

diakin

Сообщения : 37
Дата регистрации : 2009-04-06
Откуда : С-Петербург

Посмотреть профиль http://miraxem.com

Вернуться к началу Перейти вниз

Re: универсальный конвертор текстовых файлов

Сообщение  Eric-S в Сб Апр 11, 2009 5:30 am

Угу. Оно самое.
короче все названия кодировок.
например есть у меня "cp1251", но если просить "windows-1251" или "cyrilic win" то не поймёт.

Ох. Давно я уже в конвертор не влезал. Да и на fb не кодил.
думаю, может быть на c++ пересесть.
А пока всё висит и отстывает.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 33
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: универсальный конвертор текстовых файлов

Сообщение  diakin в Сб Апр 11, 2009 10:25 am

Ну С++ конечно более привычный для всех язык и в плане трудоустройства его знание необходимо.
А так конечно, что бросаться из стороны в сторону No
Laughing

Что касается псевдонимов кодировок, то там же у тебя есть список в файле, при перекодировке можно выбрать оттуда.

diakin

Сообщения : 37
Дата регистрации : 2009-04-06
Откуда : С-Петербург

Посмотреть профиль http://miraxem.com

Вернуться к началу Перейти вниз

Re: универсальный конвертор текстовых файлов

Сообщение  Eric-S в Сб Апр 11, 2009 11:02 am

Я с этим списком... Баловался вообщем макропрограммированием.
А сейчас эта програмка требует некоторой доработки, чтобы ещё и псевдонимы добавляла.

Если честно, то я сейчас программирование отодвинул в сторону. Нет у меня настроение. Последнее что писал, это скрипт для перегона из txt в html, на php с кучей регекспов.

C++ мне нравиться только тем, что там лучше реализовано объектное программирование. Но мне лениво многие свои проги переделывать под си.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 33
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: универсальный конвертор текстовых файлов

Сообщение  diakin в Сб Апр 11, 2009 10:51 pm

Eric-S пишет:
Если честно, то я сейчас программирование отодвинул в сторону. Нет у меня настроение. Последнее что писал, это скрипт для перегона из txt в html, на php с кучей регекспов.

C++ мне нравиться только тем, что там лучше реализовано объектное программирование. Но мне лениво многие свои проги переделывать под си.

Да, бывает что-то делаешь и не оторваться, а бывает, что надо делать - а никак.
Вообще главное - начать ;-)
Хорошо, что довел эту библиотеку. Попробую ее прикрутить к своему софту.

Иду по твоим стопам, изучаю юникод.

Если к кириллическому тексту в кодировке Windows-1251 20 раз подряд применить перекодирование KOI8-R→Windows-1251, в итоге будет получен исходный текст.

Так, вот еще псевдонимы
http://java.sun.com/javase/6/docs/technotes/guides/intl/encoding.doc.html


Набор символов

diakin

Сообщения : 37
Дата регистрации : 2009-04-06
Откуда : С-Петербург

Посмотреть профиль http://miraxem.com

Вернуться к началу Перейти вниз

Re: универсальный конвертор текстовых файлов

Сообщение  Eric-S в Пн Апр 13, 2009 2:20 pm

Ох. Нет. Библиотеку до ума я не довёл. К своему сожалению.
И даже не знаю, буду ли её ещё мучать.
Было у меня два желания.
1 ещё раз переработать mstring.
2. вынести функции перекодировки в статическии библиотеки.

Ещё тут человечек желал прекрутить её к vb, но что-то не сраслось.

том, что utf-8 для старших кодов не сделан я уже писал. Там в коде по прежнему стоят заглушки.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 33
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: универсальный конвертор текстовых файлов

Сообщение  Спонсируемый контент


Спонсируемый контент


Вернуться к началу Перейти вниз

Предыдущая тема Следующая тема Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения