|
|
|
TEncoding изменение кодировки файла
|
|||
|---|---|---|---|
|
#18+
Добрый день! Столкнулся с необходимостью определения кодировки файла при открытии и возможности перекодирования в выбранную кодировку. Сама задача проблем не вызывает, но возник вопрос: существует ли возможность как-то определить, возможно ли в принципе перекодировка между двумя кодовыми страницами. Можно, конечно, тупо поместить конструкцию TEncoding.Convert в Try...Except, но очень хотелось бы иметь более интеллектуальный метод (если он, конечно, существует в принципе)... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2020, 19:34 |
|
||
|
TEncoding изменение кодировки файла
|
|||
|---|---|---|---|
|
#18+
S_Gur, Какова задача? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2020, 19:36 |
|
||
|
TEncoding изменение кодировки файла
|
|||
|---|---|---|---|
|
#18+
Cobalt747, обычный текстовый редактор с ориентацией на программиста, т. е. более гибкая настройка обработки редактируемого файла. Например, при изменении SQL-скрипта хотелось бы сразу выполнить его в командном режиме и посмотреть результат в окне выполнения, не переходя в менеджер баз данных ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2020, 19:41 |
|
||
|
TEncoding изменение кодировки файла
|
|||
|---|---|---|---|
|
#18+
S_Gur возможно ли в принципе перекодировка между двумя кодовыми страницами. Последовательность ABC легко переконвертируется из 1251 в 1252. А на последовательности АБВ произойдет облом. Поэтому способа узнать о возможности, кроме как попытаться перекодировать конкретную последовательность, нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2020, 21:53 |
|
||
|
TEncoding изменение кодировки файла
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, С потерями перекодировать можно что угодно во что угодно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2020, 21:59 |
|
||
|
TEncoding изменение кодировки файла
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, это понятно. Хотелось просто обойтись без лишних экцепшенов, которые дает TEncoding при попытке конвертации между несуществующими кодировками ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2020, 22:22 |
|
||
|
TEncoding изменение кодировки файла
|
|||
|---|---|---|---|
|
#18+
rgreat, Пока я собираюсь работать только с TEncoding. Поэтому у меня только один вопрос: отработает TEncoding.Convert или нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2020, 22:43 |
|
||
|
TEncoding изменение кодировки файла
|
|||
|---|---|---|---|
|
#18+
S_Gur _Vasilisk_, это понятно. Хотелось просто обойтись без лишних экцепшенов, которые дает TEncoding при попытке конвертации между несуществующими кодировками Пардон, несовместимыми кодировками ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2020, 22:53 |
|
||
|
TEncoding изменение кодировки файла
|
|||
|---|---|---|---|
|
#18+
S_Gur ...поместить конструкцию TEncoding.Convert в Try...Except, но очень хотелось бы иметь более интеллектуальный метод (если он, конечно, существует в принципе)... Ну, заверни метод с try-except в отдельную функцию - будет "интеллектуальный метод". ЗЫ: у нас тут есть коллеги, которые боятся .dll's. Может, ты функций боишься? Не бойся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2020, 23:19 |
|
||
|
TEncoding изменение кодировки файла
|
|||
|---|---|---|---|
|
#18+
ъъъъъ, Try-Except - это не интеллектуальный метод, во что бы он ни был завернут. Это скорее метод "научного тыка" - тупо долбиться и надеяться, что сработает. Интеллектуальный - по моему мнению - это предварительный анализ, чтобы выяснить, можно ли выполнить эту операцию в принципе. Другое дело, что пока я ни алгоритма, ни готовых библиотек, выполняющих такой анализ, не нашел. Похоже, в природе его не существует ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2020, 06:35 |
|
||
|
TEncoding изменение кодировки файла
|
|||
|---|---|---|---|
|
#18+
Сейчас придет "оптимизатор" на начнет рекламировать свои глючные библиотеки. S_Gur, не заплатил ли он тебе за рекламу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2020, 06:43 |
|
||
|
TEncoding изменение кодировки файла
|
|||
|---|---|---|---|
|
#18+
ъъъъъ, За слова то надо отвечать Найдёшь глюк - говори по делу. А не нашёл - чего болтаешь тогда? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2020, 09:55 |
|
||
|
TEncoding изменение кодировки файла
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, а что это ты вдруг решил, что я о тебе? Мания величия? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2020, 09:59 |
|
||
|
TEncoding изменение кодировки файла
|
|||
|---|---|---|---|
|
#18+
ъъъъъ, Наверное с того, что оптимизатором ты называешь меня Что правда Только без кавычек ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2020, 10:08 |
|
||
|
TEncoding изменение кодировки файла
|
|||
|---|---|---|---|
|
#18+
S_Gur, Есть известные библиотеки iconv и libicu. Они на Си и не очень удобные Для Delphi есть UniConv, она поможет тебе с конвертированием из одной кодировки в другую. Там для этих задач есть TUniConvContext, где задаёшь исходную кодировку и результирующую. Есть примеры. Но мне кажется твой уровень не позволит пока этим воспользоваться. Можешь так же посмотреть проект CahedTexts - он в частности использует UniConv для конвертации потока текста на лету. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2020, 10:13 |
|
||
|
TEncoding изменение кодировки файла
|
|||
|---|---|---|---|
|
#18+
S_Gur Другое дело, что пока я ни алгоритма, ни готовых библиотек, выполняющих такой анализ, не нашел. Похоже, в природе его не существует EnumSystemCodePagesA? Но вариант с try-except лучше: какое значение имеет, почему не выполнить преобразование: памяти мало или CP кривой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2020, 10:20 |
|
||
|
TEncoding изменение кодировки файла
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, мне не надо использовать другие библиотеки для конвертирования. Для моей задачи мне по уши хватает возможностей TEncoding. В идеале я хочу иметь функцию, в которую на вход можно подать исходную и результирующую кодовые старницы, а на выходе получить либо True - что значит, что конвертировать можно, - либо, в противном случае, False. Либо что-то, что я могу использовать как эту функцию. Если такое невозможно, то мне вполне хватает обернутого в Try-Except TEncoding.Convert ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2020, 11:23 |
|
||
|
TEncoding изменение кодировки файла
|
|||
|---|---|---|---|
|
#18+
"Несовместимость" кодировок - это если символы из одной отсутствуют в другой => нужны полные перечни символов в каждой кодировке => искать по ключевым словам "char maps". В каком-то софте видел подобные списки. В ICU точно есть, т.к. по-другому они бы и не смогли сделать перекодировку. Ну а алгоритм простой - пробегать по символам исходной кодировки, перегонять в юникод, проверять, есть ли такой в кодировке назначения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2020, 11:28 |
|
||
|
TEncoding изменение кодировки файла
|
|||
|---|---|---|---|
|
#18+
Fr0sT-Brutal, я понял. Спасибо. Буду думать, стоит ли мне реализовывать это самому ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2020, 11:38 |
|
||
|
TEncoding изменение кодировки файла
|
|||
|---|---|---|---|
|
#18+
S_Gur, А с чего ты взял, что TEncoding выдаёт Exception? Вообще-то типичная практика - если символы нельзя представить в конечной кодировке - он заменяется знаком вопроса, либо #$fffd Контекст твоей задачи не очень ясен Но если речь о файле целиком, т.е. можно ли перекодировать все символы файла, я бы сделал прогонку двойной конвертации (исходный --> конечный --> восстановленный). И сравнивал исходные данные с восстановленными. Типичным способом указать кодировку файла является BOM Но есть файлы без BOM - и там уже однозначно нельзя определить, какая кодировка. Обычно кодируют ANSI, но ANSI тоже бывает разный. На моём компе это 1251, на компе клиента может быть 1253. Иногда без BOM кодируют UTF-8, например, XML или JSON файлы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2020, 12:20 |
|
||
|
TEncoding изменение кодировки файла
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, С того, что я этот экцепшен получил. Из-за этого я и занялся этим вопросом. Я не готов сейчас заниматься интеллектуальной конвертацией - может быть, на следующем этапе. Сейчас меня вполне устраивает либо беспроблемная конвертация с помощью TEncoding, либо я оставляю файл в его первозданном состоянии ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2020, 12:34 |
|
||
|
TEncoding изменение кодировки файла
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU S_Gur, Типичным способом указать кодировку файла является BOM Но есть файлы без BOM - и там уже однозначно нельзя определить, какая кодировка. Обычно кодируют ANSI, но ANSI тоже бывает разный. На моём компе это 1251, на компе клиента может быть 1253. Иногда без BOM кодируют UTF-8, например, XML или JSON файлы. Мне не надо ничего указывать. У меня уже определена (насколько правильно - вопрос второй) текущая кодировка файла. Результирующую я выбираю из списка. При конвертации я указываю вполне себе конкретные кодировки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2020, 12:56 |
|
||
|
TEncoding изменение кодировки файла
|
|||
|---|---|---|---|
|
#18+
нафиг изобретать ещё один лисапед с квадратными колёсами? ты выбрал инструмент, дак пользуйся им. лови эксепшен и обрабатывай. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2020, 13:09 |
|
||
|
TEncoding изменение кодировки файла
|
|||
|---|---|---|---|
|
#18+
Мимопроходящий, уже... :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2020, 13:15 |
|
||
|
TEncoding изменение кодировки файла
|
|||
|---|---|---|---|
|
#18+
S_Gur несовместимыми кодировками ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2020, 13:52 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=40012885&tid=2037898]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
155ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
| others: | 231ms |
| total: | 494ms |

| 0 / 0 |
