универсальный конвертор текстовых файлов
Участников: 3
универсальный конвертор текстовых файлов
Вот. Написал. Исходники прилагаются. Проект по сути завершон.
Я конечно буду его ещё немного оптимизировать. Искать и выправлять баги. Добавлять новые функции.
А так... Оно уже есть. И оно работает.
Я уже юзаю его в других проектах.
универсальный конвертор текстовых файлов
Утилита предназначена для перекодировки текстовых файлов. Поддерживаются 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
Я конечно буду его ещё немного оптимизировать. Искать и выправлять баги. Добавлять новые функции.
А так... Оно уже есть. И оно работает.
Я уже юзаю его в других проектах.
универсальный конвертор текстовых файлов
Утилита предназначена для перекодировки текстовых файлов. Поддерживаются 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 раз(а)
Re: универсальный конвертор текстовых файлов
Если я правильно понял, то с длиной основных буферов разобрался.
Покрайней мере тесты прошли успешно.
В конце файлов не появилось новых символов.
И символов в конце не потерялось.
А эти две пакости у меня были.
Перепроверил все индексы и привёл к единому (стандартному) пониманию.
А главное у меня теперь не выскакивает ошибок при перекодировании.
Ну, буду ещё тестить. Там вариантов-то много. Надеюсь, что к этим функциям больше не вернусь.
А теперь в плотную займусь библиотекой.
Вот такие у меня мысли, если кому интересно.
О подробностях, юзанья смотрите в файл !info.txt
Покрайней мере тесты прошли успешно.
В конце файлов не появилось новых символов.
И символов в конце не потерялось.
А эти две пакости у меня были.
Перепроверил все индексы и привёл к единому (стандартному) пониманию.
А главное у меня теперь не выскакивает ошибок при перекодировании.
Ну, буду ещё тестить. Там вариантов-то много. Надеюсь, что к этим функциям больше не вернусь.
А теперь в плотную займусь библиотекой.
Вот такие у меня мысли, если кому интересно.
О подробностях, юзанья смотрите в файл !info.txt
Re: универсальный конвертор текстовых файлов
Интересно, а вообще аналоги такой библиотеки существуют?
Re: универсальный конвертор текстовых файлов
Аналоги... По моему нет. Они либо входят в операционку, напр windows. Причём ещё хрен докапаешься.
Знаю есть в qt, похожии функции.
В какой-то мере iconv являеться аналогом, но имхо она сделано криво и кажись не умеет работать с файлами.
Есть юниксовая утилитка recode, но она кажись заброшена. Судя по описанию, у неё функционала немного больше.
Но я не собираюсь пока замораживать проект. И вообще задачи были другие.
Знаю есть в qt, похожии функции.
В какой-то мере iconv являеться аналогом, но имхо она сделано криво и кажись не умеет работать с файлами.
Есть юниксовая утилитка recode, но она кажись заброшена. Судя по описанию, у неё функционала немного больше.
Но я не собираюсь пока замораживать проект. И вообще задачи были другие.
Re: универсальный конвертор текстовых файлов
Вот еще можно добавить
- Код:
'*****************************************
' 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
Re: универсальный конвертор текстовых файлов
Ну и прочие почтовые 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?=
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?=
Re: универсальный конвертор текстовых файлов
Спасибо! Сейчас посмотрим.
cp1251 и koi 8 поддерживает.
Надо бы конечно добавить псевдонимов, ну да я их всё равно не знаю.
cp1251 и koi 8 поддерживает.
Надо бы конечно добавить псевдонимов, ну да я их всё равно не знаю.
Re: универсальный конвертор текстовых файлов
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
Re: универсальный конвертор текстовых файлов
Угу. Оно самое.
короче все названия кодировок.
например есть у меня "cp1251", но если просить "windows-1251" или "cyrilic win" то не поймёт.
Ох. Давно я уже в конвертор не влезал. Да и на fb не кодил.
думаю, может быть на c++ пересесть.
А пока всё висит и отстывает.
короче все названия кодировок.
например есть у меня "cp1251", но если просить "windows-1251" или "cyrilic win" то не поймёт.
Ох. Давно я уже в конвертор не влезал. Да и на fb не кодил.
думаю, может быть на c++ пересесть.
А пока всё висит и отстывает.
Re: универсальный конвертор текстовых файлов
Ну С++ конечно более привычный для всех язык и в плане трудоустройства его знание необходимо.
А так конечно, что бросаться из стороны в сторону
Что касается псевдонимов кодировок, то там же у тебя есть список в файле, при перекодировке можно выбрать оттуда.
А так конечно, что бросаться из стороны в сторону
Что касается псевдонимов кодировок, то там же у тебя есть список в файле, при перекодировке можно выбрать оттуда.
Re: универсальный конвертор текстовых файлов
Я с этим списком... Баловался вообщем макропрограммированием.
А сейчас эта програмка требует некоторой доработки, чтобы ещё и псевдонимы добавляла.
Если честно, то я сейчас программирование отодвинул в сторону. Нет у меня настроение. Последнее что писал, это скрипт для перегона из txt в html, на php с кучей регекспов.
C++ мне нравиться только тем, что там лучше реализовано объектное программирование. Но мне лениво многие свои проги переделывать под си.
А сейчас эта програмка требует некоторой доработки, чтобы ещё и псевдонимы добавляла.
Если честно, то я сейчас программирование отодвинул в сторону. Нет у меня настроение. Последнее что писал, это скрипт для перегона из txt в html, на php с кучей регекспов.
C++ мне нравиться только тем, что там лучше реализовано объектное программирование. Но мне лениво многие свои проги переделывать под си.
Re: универсальный конвертор текстовых файлов
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
Набор символов
Re: универсальный конвертор текстовых файлов
Ох. Нет. Библиотеку до ума я не довёл. К своему сожалению.
И даже не знаю, буду ли её ещё мучать.
Было у меня два желания.
1 ещё раз переработать mstring.
2. вынести функции перекодировки в статическии библиотеки.
Ещё тут человечек желал прекрутить её к vb, но что-то не сраслось.
том, что utf-8 для старших кодов не сделан я уже писал. Там в коде по прежнему стоят заглушки.
И даже не знаю, буду ли её ещё мучать.
Было у меня два желания.
1 ещё раз переработать mstring.
2. вынести функции перекодировки в статическии библиотеки.
Ещё тут человечек желал прекрутить её к vb, но что-то не сраслось.
том, что utf-8 для старших кодов не сделан я уже писал. Там в коде по прежнему стоят заглушки.
Права доступа к этому форуму:
Вы не можете отвечать на сообщения