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

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

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

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


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

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

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


S_Gur,

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

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

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

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

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


EnumSystemCodePagesA?

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

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

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

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

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


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


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