52 / 52 / 25
Регистрация: 01.02.2014
Сообщений: 201
|
||||||
1 | ||||||
Как автоматически определить кодировку при открытии текстового файла?22.11.2014, 16:42. Показов 8100. Ответов 15
Метки нет (Все метки)
Есть прорамма типа блокнот. Для текста используется RTB.
После открытия файла у пользователя есть возможность поменять кодировку в менюшке. При выборе пункта меню в процедуру, что приведена ниже передается параметр "Kodirovka", который говорит с какой кодировкой переоткрыть файл. Вопрос: как определить кодировку автоматически и открыть с правильной кодировкой? Открываться могут, как обычные Txt файлы, так и Rtf.
0
|
22.11.2014, 16:42 | |
Ответы с готовыми решениями:
15
Как изменить кодировку при открытии файла Как указать кодировку при чтении текстового файла Как автоматически при открытии файла скрыть строки? Как в Delphi создать программу, требующую пароль при открытии текстового файла? |
395 / 314 / 53
Регистрация: 14.08.2014
Сообщений: 1,010
|
||||||
22.11.2014, 17:02 | 2 | |||||
Visualist,
Т.е. суть в том, что за место utf8, unicode или 1251 пишется Default, т.е. кодировка по умолчанию.
1
|
52 / 52 / 25
Регистрация: 01.02.2014
Сообщений: 201
|
|
22.11.2014, 17:09 [ТС] | 3 |
пробовал когда-то, ушел от этого, т.к. Default в винде, точно не помню, но по моему - это ANCI.
и если написать RTB.Text = IO.File.ReadAllText(FilePath, Encoding.Default), то не откроется ни UTF8, ни Unicode.
0
|
22.11.2014, 20:14 | 4 | ||||||||||
Думаю, что это можно сделать так
Откуда берутся эти коды
1
|
1589 / 662 / 225
Регистрация: 09.06.2011
Сообщений: 1,334
|
|
22.11.2014, 20:37 | 5 |
это лишь проверка на BOM коды. Для файла без них необходимо просматривать все его содержимое в поисках характерных последовательностей для кодировок.
1
|
Администратор
|
|
22.11.2014, 20:49 | 6 |
Visualist, в текстовых файлах не хранится информация о их кодировке. За исключением случая с кодировками Unicode где в файле может быть BOM и тогда .NET автоматически учтет его значение. Для остальных файлов кодировку придется угадывать. Например, с помощью библиотеки ude.
1
|
52 / 52 / 25
Регистрация: 01.02.2014
Сообщений: 201
|
|
23.11.2014, 16:35 [ТС] | 7 |
OwenGlendower, не совсем понятно, как с этой библиотекой работать, она мне может выдать тип кодировки моего текста?
0
|
Администратор
|
||||||
23.11.2014, 17:51 | 8 | |||||
Visualist, ude поможет угадать название кодировки и ты сможешь открыть файл в правильной кодировке. Очевидно можно написать функцию которая угадывает кодировку и создает StreamReader:
1
|
52 / 52 / 25
Регистрация: 01.02.2014
Сообщений: 201
|
|
23.11.2014, 19:19 [ТС] | 9 |
OwenGlendower, создал новый проект, чтобы потестить ваш код. Мне подчеркнуло CharsetDetector. Я так понимаю, это объект из библиотеки "Ude" и ее нужно как то включить в мой проект. Делал я это только 1 раз когда-то, я библиотеку dll ложил в папку с программой и потом подключал через ссылку.
В данном случае непонятно как подключить... Или это иначе как-то делается? Обьясните пожалуйста.
0
|
Администратор
|
|
23.11.2014, 21:01 | 10 |
Сообщение было отмечено Visualist как решение
Решение
Visualist, добавь ссылку через NuGet (UDE.CSharp) или скачай исходники, откомпилируй, положи её рядом с solution, и добавь reference.
1
|
52 / 52 / 25
Регистрация: 01.02.2014
Сообщений: 201
|
|
23.11.2014, 22:35 [ТС] | 11 |
так и сделал. а можно как-то сделать, чтобы не таскать за программкой dll-ки?
p.s. не понял, как добавлять ссылку через NuGet
0
|
Администратор
|
|
23.11.2014, 22:59 | 12 |
Если в рамках одного компьютера, то путем добавления GAC, что в данном случае не подойдет из-за отсутствия строгого имени. Между разными компьютерами с помощью ILMerge или прямым включением исходников в проект. Только вот непонятно чем тебе dll-ки мешают?
Через диалог или консоль команд.
1
|
52 / 52 / 25
Регистрация: 01.02.2014
Сообщений: 201
|
|
23.11.2014, 23:25 [ТС] | 13 |
В принципе, ничем не мешают, но все же... один файл - не два
Допустим, добавляю через диалог. В обозревателе решений я выделяю мой проект -> Управление пакетами NuGet. Дальше ищу там UDE.CSharp, нахожу и устанавливаю. Она появляется в папке packages, что рядом с моим проектом. Но суть та же, мне нужно найти там Ude.dll и положить рядом с моим exe-шником и так же добавить ссылку. Правильно?
0
|
Администратор
|
|
23.11.2014, 23:41 | 14 |
Мой совет - не парься по этому поводу.
Нет. Больше ничего делать не надо. NuGet ссылку уже добавил и dll-ка будет автоматически копироваться в выходную папку. Главное не забывай что ссылки добавленные через NuGet лучше удалять тоже через NuGet.
1
|
39 / 39 / 8
Регистрация: 15.08.2014
Сообщений: 625
|
|
24.09.2015, 10:29 | 15 |
OwenGlendower
Не трудно подправить листинг под VB6?
0
|
Администратор
|
|
24.09.2015, 13:25 | 16 |
kreotodr, мне - трудно т.к. я не знаю VB6. Кроме того код использует .NET библиотеку UDE.CSharp поэтому кроме переделки примера нужно будет переписать и её. Насколько я знаю VB6 хорошо работает с COM. В Windows есть встроенный функционал для определения кодировок на основе интерфейса IMultiLang2. Поищи примеры его использования.
1
|
24.09.2015, 13:25 | |
24.09.2015, 13:25 | |
Помогаю со студенческими работами здесь
16
Выполнить автоматически команды при открытии файла .c в Vim Error 105 при открытии текстового файла Заполнение таблицы при открытии из текстового файла Проблема при открытии текстового файла-базы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |