Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.04.2008, 14:38   #1
Arteom
Пользователь
 
Регистрация: 22.08.2007
Сообщений: 59
По умолчанию Считывание из файла, для определения кодировки

Всем доброго времени суток! Подскажите пожалуйста как правильно считывать данные из текстового файла, для дальнейшего определения кодировки и преобразования считанного в Win-кодировку с записью в новый файл с преобразованной кодировкой. Я считываю ReadLn(txt_file, str). Таким образом считанное у меня получается в stringe. Далее мне нужно опредилять кодировку, не возникнет ли тут каких-либо проблем? И далее, когда мне необходимо перекодировать из Unacoda, использую ф-цию WideCharToString, у нее на входе WideChar, соответственно пишу str_to_rec := WideCharToString(PWideChar(str)) и уже str_to_rec записываю в новый файл. Но правильно ли это?
Arteom вне форума Ответить с цитированием
Старый 29.04.2008, 15:21   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Там первые два-три байта описывают кодировку текстового файла. Если их нет т.е. при сравнении будет последнее значит ASCII Информации о том как записываются файлы ( кодировки ) в сети куча. Ищем и читаем. Все нужные функции есть в System.pas. Сам бы выложил, но найти не могу то что писал однажды...
BOBAH13 вне форума Ответить с цитированием
Старый 30.04.2008, 13:14   #3
Arteom
Пользователь
 
Регистрация: 22.08.2007
Сообщений: 59
По умолчанию

Не получается на этапе перекодирования. Вот я определил что у меня Unicode. Как дальше преобразовать юникодный текст, считанный из файла в переменную типа string в Win-кодировку? С помощью WideCharToString не получается.
Arteom вне форума Ответить с цитированием
Старый 30.04.2008, 13:34   #4
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Может у вас не Unicode, а UTF8 ? Если точно unicode то функция должна работать, если вы все верно делаите.
BOBAH13 вне форума Ответить с цитированием
Старый 30.04.2008, 14:21   #5
Arteom
Пользователь
 
Регистрация: 22.08.2007
Сообщений: 59
По умолчанию

У меня точно Unicode. А вот делаю я наверняка не правильно, но не пойму как сделать правильно. Думаю проблема в том, что я считываю из файла в Buffer, далее делаю вот что, что скорее всего не верно:
buffer_len := Length(Buffer);
for i:=1 to buffer_len do
begin
wide_char := PWideChar(Buffer[i]);
result := result + WideCharToString(wide_char);
end;
Получается что преобразовываю типы туда сюда, наверное тут и ошибка. Подскажите как правильно.
Arteom вне форума Ответить с цитированием
Старый 30.04.2008, 17:20   #6
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Unicode - WCHAR ( PWCHAR = PWideChar = ^WCHAR ) занимает Word = 2 байта.
ASCII - CHAR ( PCHAR = PAnsiChar = ^CHAR ) занимает Byte = 1 байт.

Следовательно перебирать надо не по одному байту, а сразу за заход по два... Думаю поняли. И если уж даете код, то давайет сразу и типа переменных ( директива Var )
BOBAH13 вне форума Ответить с цитированием
Старый 04.05.2008, 10:11   #7
Arteom
Пользователь
 
Регистрация: 22.08.2007
Сообщений: 59
По умолчанию

Спасибо большое, разобрался.
Arteom вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Считывание интов из файла kydja Общие вопросы C/C++ 1 17.05.2008 18:16
Смена кодировки названия открываемого файла в адресной строке при переходе на него по ссылки Adamant HTML и CSS 1 08.02.2008 18:51
Считывание с файла (assembler) Prizrak58 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 30.01.2008 18:40
Считывание из файла DimkinStd Общие вопросы Delphi 7 24.01.2007 19:18
Считывание данных из файла PAVEL315 Общие вопросы Delphi 26 17.12.2006 00:53