Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TEncoding изменение кодировки файла / 25 сообщений из 30, страница 1 из 2
28.10.2020, 19:34
    #40012828
S_Gur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEncoding изменение кодировки файла
Добрый день! Столкнулся с необходимостью определения кодировки файла при открытии и возможности перекодирования в выбранную кодировку. Сама задача проблем не вызывает, но возник вопрос: существует ли возможность как-то определить, возможно ли в принципе перекодировка между двумя кодовыми страницами. Можно, конечно, тупо поместить конструкцию TEncoding.Convert в Try...Except, но очень хотелось бы иметь более интеллектуальный метод (если он, конечно, существует в принципе)...
...
Рейтинг: 0 / 0
28.10.2020, 19:36
    #40012829
Cobalt747
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEncoding изменение кодировки файла
S_Gur,

Какова задача?
...
Рейтинг: 0 / 0
28.10.2020, 19:41
    #40012833
S_Gur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEncoding изменение кодировки файла
Cobalt747, обычный текстовый редактор с ориентацией на программиста, т. е. более гибкая настройка обработки редактируемого файла. Например, при изменении SQL-скрипта хотелось бы сразу выполнить его в командном режиме и посмотреть результат в окне выполнения, не переходя в менеджер баз данных
...
Рейтинг: 0 / 0
28.10.2020, 21:53
    #40012865
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEncoding изменение кодировки файла
S_Gur
возможно ли в принципе перекодировка между двумя кодовыми страницами.
Вопрос поставлен неверно. Перекодируются не кодовые страницы, а последовательность символов.

Последовательность ABC легко переконвертируется из 1251 в 1252. А на последовательности АБВ произойдет облом. Поэтому способа узнать о возможности, кроме как попытаться перекодировать конкретную последовательность, нет.
...
Рейтинг: 0 / 0
28.10.2020, 21:59
    #40012867
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEncoding изменение кодировки файла
_Vasilisk_,

С потерями перекодировать можно что угодно во что угодно.
...
Рейтинг: 0 / 0
28.10.2020, 22:22
    #40012873
S_Gur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEncoding изменение кодировки файла
_Vasilisk_, это понятно. Хотелось просто обойтись без лишних экцепшенов, которые дает TEncoding при попытке конвертации между несуществующими кодировками
...
Рейтинг: 0 / 0
28.10.2020, 22:43
    #40012881
S_Gur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEncoding изменение кодировки файла
rgreat, Пока я собираюсь работать только с TEncoding. Поэтому у меня только один вопрос: отработает TEncoding.Convert или нет
...
Рейтинг: 0 / 0
28.10.2020, 22:53
    #40012885
S_Gur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEncoding изменение кодировки файла
S_Gur
_Vasilisk_, это понятно. Хотелось просто обойтись без лишних экцепшенов, которые дает TEncoding при попытке конвертации между несуществующими кодировками


Пардон, несовместимыми кодировками
...
Рейтинг: 0 / 0
28.10.2020, 23:19
    #40012892
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEncoding изменение кодировки файла
S_Gur
...поместить конструкцию TEncoding.Convert в Try...Except, но очень хотелось бы иметь более интеллектуальный метод (если он, конечно, существует в принципе)...

Ну, заверни метод с try-except в отдельную функцию - будет "интеллектуальный метод".

ЗЫ: у нас тут есть коллеги, которые боятся .dll's. Может, ты функций боишься? Не бойся.
...
Рейтинг: 0 / 0
29.10.2020, 06:35
    #40012938
S_Gur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEncoding изменение кодировки файла
ъъъъъ, Try-Except - это не интеллектуальный метод, во что бы он ни был завернут. Это скорее метод "научного тыка" - тупо долбиться и надеяться, что сработает. Интеллектуальный - по моему мнению - это предварительный анализ, чтобы выяснить, можно ли выполнить эту операцию в принципе. Другое дело, что пока я ни алгоритма, ни готовых библиотек, выполняющих такой анализ, не нашел. Похоже, в природе его не существует
...
Рейтинг: 0 / 0
29.10.2020, 06:43
    #40012939
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEncoding изменение кодировки файла
Сейчас придет "оптимизатор" на начнет рекламировать свои глючные библиотеки.


S_Gur,

не заплатил ли он тебе за рекламу?
...
Рейтинг: 0 / 0
29.10.2020, 09:55
    #40012958
SOFT FOR YOU
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEncoding изменение кодировки файла
ъъъъъ,

За слова то надо отвечать
Найдёшь глюк - говори по делу. А не нашёл - чего болтаешь тогда?
...
Рейтинг: 0 / 0
29.10.2020, 09:59
    #40012960
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEncoding изменение кодировки файла
SOFT FOR YOU,

а что это ты вдруг решил, что я о тебе? Мания величия?
...
Рейтинг: 0 / 0
29.10.2020, 10:08
    #40012962
SOFT FOR YOU
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEncoding изменение кодировки файла
ъъъъъ,

Наверное с того, что оптимизатором ты называешь меня
Что правда
Только без кавычек
...
Рейтинг: 0 / 0
29.10.2020, 10:13
    #40012964
SOFT FOR YOU
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEncoding изменение кодировки файла
S_Gur,

Есть известные библиотеки iconv и libicu. Они на Си и не очень удобные
Для Delphi есть UniConv, она поможет тебе с конвертированием из одной кодировки в другую. Там для этих задач есть TUniConvContext, где задаёшь исходную кодировку и результирующую. Есть примеры. Но мне кажется твой уровень не позволит пока этим воспользоваться. Можешь так же посмотреть проект CahedTexts - он в частности использует UniConv для конвертации потока текста на лету.
...
Рейтинг: 0 / 0
29.10.2020, 10:20
    #40012966
x1ca4064
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEncoding изменение кодировки файла
S_Gur
Другое дело, что пока я ни алгоритма, ни готовых библиотек, выполняющих такой анализ, не нашел. Похоже, в природе его не существует


EnumSystemCodePagesA?

Но вариант с try-except лучше: какое значение имеет, почему не выполнить преобразование: памяти мало или CP кривой?
...
Рейтинг: 0 / 0
29.10.2020, 11:23
    #40012982
S_Gur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEncoding изменение кодировки файла
SOFT FOR YOU, мне не надо использовать другие библиотеки для конвертирования. Для моей задачи мне по уши хватает возможностей TEncoding. В идеале я хочу иметь функцию, в которую на вход можно подать исходную и результирующую кодовые старницы, а на выходе получить либо True - что значит, что конвертировать можно, - либо, в противном случае, False. Либо что-то, что я могу использовать как эту функцию. Если такое невозможно, то мне вполне хватает обернутого в Try-Except TEncoding.Convert
...
Рейтинг: 0 / 0
29.10.2020, 11:28
    #40012984
Fr0sT-Brutal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEncoding изменение кодировки файла
"Несовместимость" кодировок - это если символы из одной отсутствуют в другой =>
нужны полные перечни символов в каждой кодировке =>
искать по ключевым словам "char maps".
В каком-то софте видел подобные списки. В ICU точно есть, т.к. по-другому они бы и не смогли сделать перекодировку.
Ну а алгоритм простой - пробегать по символам исходной кодировки, перегонять в юникод, проверять, есть ли такой в кодировке назначения.
...
Рейтинг: 0 / 0
29.10.2020, 11:38
    #40012989
S_Gur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEncoding изменение кодировки файла
Fr0sT-Brutal, я понял. Спасибо. Буду думать, стоит ли мне реализовывать это самому
...
Рейтинг: 0 / 0
29.10.2020, 12:20
    #40012999
SOFT FOR YOU
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEncoding изменение кодировки файла
S_Gur,

А с чего ты взял, что TEncoding выдаёт Exception?
Вообще-то типичная практика - если символы нельзя представить в конечной кодировке - он заменяется знаком вопроса, либо #$fffd

Контекст твоей задачи не очень ясен
Но если речь о файле целиком, т.е. можно ли перекодировать все символы файла, я бы сделал прогонку двойной конвертации (исходный --> конечный --> восстановленный). И сравнивал исходные данные с восстановленными.

Типичным способом указать кодировку файла является BOM
Но есть файлы без BOM - и там уже однозначно нельзя определить, какая кодировка. Обычно кодируют ANSI, но ANSI тоже бывает разный. На моём компе это 1251, на компе клиента может быть 1253. Иногда без BOM кодируют UTF-8, например, XML или JSON файлы.
...
Рейтинг: 0 / 0
29.10.2020, 12:34
    #40013003
S_Gur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEncoding изменение кодировки файла
SOFT FOR YOU, С того, что я этот экцепшен получил. Из-за этого я и занялся этим вопросом. Я не готов сейчас заниматься интеллектуальной конвертацией - может быть, на следующем этапе. Сейчас меня вполне устраивает либо беспроблемная конвертация с помощью TEncoding, либо я оставляю файл в его первозданном состоянии
...
Рейтинг: 0 / 0
29.10.2020, 12:56
    #40013009
S_Gur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEncoding изменение кодировки файла
SOFT FOR YOU
S_Gur,

Типичным способом указать кодировку файла является BOM
Но есть файлы без BOM - и там уже однозначно нельзя определить, какая кодировка. Обычно кодируют ANSI, но ANSI тоже бывает разный. На моём компе это 1251, на компе клиента может быть 1253. Иногда без BOM кодируют UTF-8, например, XML или JSON файлы.


Мне не надо ничего указывать. У меня уже определена (насколько правильно - вопрос второй) текущая кодировка файла. Результирующую я выбираю из списка. При конвертации я указываю вполне себе конкретные кодировки
...
Рейтинг: 0 / 0
29.10.2020, 13:09
    #40013011
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEncoding изменение кодировки файла
нафиг изобретать ещё один лисапед с квадратными колёсами?
ты выбрал инструмент, дак пользуйся им.
лови эксепшен и обрабатывай.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
29.10.2020, 13:15
    #40013016
S_Gur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEncoding изменение кодировки файла
Мимопроходящий, уже... :-)
...
Рейтинг: 0 / 0
29.10.2020, 13:52
    #40013028
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TEncoding изменение кодировки файла
S_Gur
несовместимыми кодировками
Еще раз 22222641
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TEncoding изменение кодировки файла / 25 сообщений из 30, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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