Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 01.12.2012, 22:10
sorockinalex sorockinalex вне форума
Начинающий
 
Регистрация: 08.08.2012
Сообщения: 178
Репутация: 10
По умолчанию Сохранение в txt в нужной кодировке

вопрос такой: файл должен быть в кодировке ascii 8 bits windows cyrillic (так мне ответил представитель компании acapela. открывать словарь в этой кодировке)
как мне правильно сохранить файл в этой кодировке? у меня сохранение делается так:
StringList.SaveToFile(ExtractFilePath(Application. ExeName)+'\user.userdico');
Это он в какой кодировке сохраняет?
Как сделать нужное мне сохранение, подробно подскажите кодом, пожалуйста, если возможно!

Последний раз редактировалось sorockinalex, 01.12.2012 в 22:21.
Ответить с цитированием
  #2  
Старый 01.12.2012, 22:25
sorockinalex sorockinalex вне форума
Начинающий
 
Регистрация: 08.08.2012
Сообщения: 178
Репутация: 10
По умолчанию

нашёл в интернете статью про ASCII 8 bit...
Цитата:
Стандарт ASCII с 8 битами не определяет содержание верхней половины таблицы кодировки. Поэтому МЕЖДУНАРОДНАЯ ОРГАНИЗАЦИЯ ПО СТАНДАРТИЗАЦИИ (ISO) взяла ответственность по определению семейства стандартов, известных как семейство ISO 8859-X. Это семейство представляет собой совокупность 8-ми битных кодировок, где младшая половина каждой кодировки (символы с кодами 0-127) соответствует ASCII, а старшая половина определяет символы для различных языков. Например, следующие кодовые страницы определены для:

8859-0 -- Новый европейский стандарт (так называемый Latin 0)
8859-1 -- Европа, Латинская Америка (также известный как Latin 1)
8859-2 -- Восточная Европа
8859-5 -- Кириллица
8859-8 -- Идиш

Таким образом мой вопрос сводится к тому, как сохранить в файл в кодировке ISO 8859-5 ????
Ответить с цитированием
  #3  
Старый 01.12.2012, 22:38
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

BOM фигнатуру в начале файла пропиши. Посмотри что блокнот пишет.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #4  
Старый 01.12.2012, 23:39
sorockinalex sorockinalex вне форума
Начинающий
 
Регистрация: 08.08.2012
Сообщения: 178
Репутация: 10
По умолчанию

Извини, не понимаю что ты сказал, кроме "в начале файла пропиши. Посмотри что блокнот пишет..."
Можешь пояснить???

нашёл процедуру в нете по перекодированию
http://www.delphisources.ru/pages/faq/base/recode.html
, переделал в функцию, но как-то неправильно она работает почему-то

Код:
function ChangeEncoding(s:String):string;
var
  c: char;
  i: integer;
  chars: array [char] of char;
  StrWin, StrIso: string;
begin
  StrWin := 'АаБбВвГгДдЕеЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯя';
  StrIso := 'РрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯяа?б?в?г?д?е?ж?з?и?йsк?лzм?н§о?пY';

  for c := #0 to #255 do
    Chars[c] := c;

  for i := 1 to Length(StrWin) do
    Chars[StrIso[i]] := StrWin[i];

  for i := 1 to Length(s) do
    s[i] := Chars[s[i]];

  Result := s;
end;

во-первых при копипастинге из браузера в делфи теряется часть символов исошной кодировки... заменяются на вопросы...

перекодировалось правильно, открываю Notepad++ в кодировке ISO , но латинские символы какие-то странные

Последний раз редактировалось sorockinalex, 01.12.2012 в 23:41.
Ответить с цитированием
  #5  
Старый 01.12.2012, 23:42
sorockinalex sorockinalex вне форума
Начинающий
 
Регистрация: 08.08.2012
Сообщения: 178
Репутация: 10
По умолчанию

и вот тут непонятен алгоритм работы программы:
Код:
  for i := 1 to Length(StrWin) do
    Chars[StrIso[i]] := StrWin[i];

почему массиву символов присваивается символ из строки символов винды?
Ответить с цитированием
  #6  
Старый 01.12.2012, 23:45
sorockinalex sorockinalex вне форума
Начинающий
 
Регистрация: 08.08.2012
Сообщения: 178
Репутация: 10
По умолчанию

понял почему неправильно работает - при копипастинге конвертируются символы в символы латинского алфавита и потом заменяются...

как в браузера в делфи вставить правильно? не понял ваще...
Ответить с цитированием
  #7  
Старый 01.12.2012, 23:56
sorockinalex sorockinalex вне форума
Начинающий
 
Регистрация: 08.08.2012
Сообщения: 178
Репутация: 10
По умолчанию

скопипастил в файл pas, открытый в Notepad++...
Открываю проект, Run - не работает как положено... при компиляции видимо меняет кодировку pas файла
Ответить с цитированием
  #8  
Старый 02.12.2012, 00:03
sorockinalex sorockinalex вне форума
Начинающий
 
Регистрация: 08.08.2012
Сообщения: 178
Репутация: 10
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
BOM фигнатуру в начале файла пропиши. Посмотри что блокнот пишет.
А какова BOM для ISO8859-5? Искал в яндексе, не нашёл... и как её прописать при сохранении из StringList.SaveTofile?
Ответить с цитированием
  #9  
Старый 02.12.2012, 01:44
sorockinalex sorockinalex вне форума
Начинающий
 
Регистрация: 08.08.2012
Сообщения: 178
Репутация: 10
По умолчанию

блин, замудохался я с этой фигнёй. вопрос копеечный, сижу уже целый день, читаю везде... зае...ся... помогите!
вот файл http://zalil.ru/34023082
нужно получить такой-же, в той же кодировке.
как это сделать? строки хранятся в StringList....
Ответить с цитированием
  #10  
Старый 02.12.2012, 08:23
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от sorockinalex
блин, замудохался я с этой фигнёй. вопрос копеечный, сижу уже целый день, читаю везде... зае...ся... помогите!
вот файл http://zalil.ru/34023082
нужно получить такой-же, в той же кодировке.
как это сделать? строки хранятся в StringList....

Версия Delphi видимо > 2009, т.е. юникодная?
Думаю, вот эта статья может помочь:
http://mzemaitis.wordpress.com/2011/...ode-text-file/
Там наоборот, нужно в юникоде, но если как следует подумать, то написать в обратную сторону, думаю, не сложно.
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
sorockinalex (02.12.2012)
  #11  
Старый 02.12.2012, 17:05
sorockinalex sorockinalex вне форума
Начинающий
 
Регистрация: 08.08.2012
Сообщения: 178
Репутация: 10
По умолчанию

нет, у меня D7
Ответить с цитированием
  #12  
Старый 02.12.2012, 20:25
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от sorockinalex
нет, у меня D7

тогда не понимаю проблемы. По дефолту в Delphi 7 встрока есть ANSI. А уж кодировка зависит от текущей страницы в системе.
Ответить с цитированием
  #13  
Старый 02.12.2012, 21:32
robt robt вне форума
Активный
 
Регистрация: 17.02.2011
Сообщения: 297
Репутация: -1806
По умолчанию

чтоб скопировать из чегото в дельфи 7 нужно и там и там рускую раскладку включить
Ответить с цитированием
Этот пользователь сказал Спасибо robt за это полезное сообщение:
sorockinalex (09.12.2012)
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 17:56.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025