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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.03.2012, 19:27   #1
Hornet_nsk
 
Регистрация: 04.02.2012
Сообщений: 7
По умолчанию При создании текстового файла не распознается русский шрифт

Borland Turbo Pascal 7.0,
Винда XP
Паскаль русифицирован, раскладка переключается нормально, на экран русский текст выводит, но когда я пытаюсь текст написать в файл и открываю его блокнотом обычным, вместо русского шрифта появляется какая-то абракадабра.
Прочитал FAQ на нескольких форумах, везде советы как Паскаль русифицировать, но это не помогает сделать запись в файл русским шрифтом, сам-то Паскаль русскую раскладку видит.
Может кто-нибудь знает, что можно сделать в данной ситуации?
Hornet_nsk вне форума Ответить с цитированием
Старый 06.03.2012, 19:53   #2
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

пересохраните файл в юникоде.... то что кодировка то да... ясен факт...
у вас xp какой пак?... раньше подобного не было при использовании каких либо программ?... быть может в самой винде проблемки.... киньте код программы.. проверим.. потестим...
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Старый 06.03.2012, 21:00   #3
spein
Программист
Форумчанин
 
Аватар для spein
 
Регистрация: 27.02.2009
Сообщений: 505
По умолчанию

проблема в кодировке. паскаль сохраняет в DOS кодировке. решений не знаю, но знаю, что в результате можно изменить кодировку и посмотреть файл
there are no limits when you're software engineer
spein вне форума Ответить с цитированием
Старый 06.03.2012, 21:57   #4
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Предыстория:
В нерусифицированом делфи при выводе текста в консоль получалась "абракодабра". Препод подсказал решение, после чего мною был написан юнит encoding:
Код:
unit encoding;
interface
  uses SysUtils,windows;
  function OEM(S:string):ansistring;
  function WIN(S:ansistring):string;
implementation
  function OEM(S:string):ansistring;
    begin
      setlength(Result,length(S));
      CharToOEMBuff(pchar(s),pansichar(result),length(s));
    end;
  function WIN(S:ansistring):string;
    begin
      setlength(Result,length(S));
      OEMToCharBuff(pansichar(s),pchar(result),length(s));
    end;
end.
Сейчас я модифицировал функцию WIN для FreePascal, думаю в турбо тоже будет работать:
Код:
program text1;
uses
  windows;
var
  t:text;
function WIN(S:ansistring):string;
var
  i:integer;
  C:pchar;
  l:longword;
begin
  setlength(win, length(S));
  new(C);
  l:=1;
  for i:=1 to length(s) do
    begin
      C^:=s[i];
      oemtocharbuff(pansichar(c),pchar(C),l);
      win[i]:=c^;
    end;
end;

begin
  assign(T,'output.txt');
  rewrite(T);
  writeln(T,WIN('русский текст'));
  close(T);
end.
В этом Free Pascal работает, проверено.

P.S. По-правде говоря, сам многого не понимаю, например разницу (в данном случае) между string и ansistring, также вообще не представляю, зачем нужна переменная L. Переписывал на угад, ориентировался на ошибки при компеляции.
Все тривиальное просто

Последний раз редактировалось whatever; 06.03.2012 в 22:16.
whatever вне форума Ответить с цитированием
Старый 06.03.2012, 22:11   #5
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Цитата:
Сейчас я модифицировал функцию WIN для FreePascal, думаю в турбо тоже будет работать:
В TP не будет!
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 06.03.2012, 22:18   #6
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Цитата:
Сообщение от Hacker19_90 Посмотреть сообщение
В TP не будет!
из-за setlength ?
Если да, то вот еще вариант:
Код:
function WIN(S:ansistring):string;
var
  i:integer;
  C:pchar;
  l:longword;
begin
//  setlength(win, length(S));
  new(C);
  l:=1;
  win:='';
  for i:=1 to length(s) do
    begin
//      l:=1;
      C^:=s[i];
      oemtocharbuff(pansichar(c),pchar(C),l);
      win:=win+c^;
    end;
end;
Все тривиальное просто

Последний раз редактировалось whatever; 06.03.2012 в 22:21.
whatever вне форума Ответить с цитированием
Старый 06.03.2012, 22:23   #7
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Цитата:
из-за setlength ?
И из-за него тоже!
+ ко всему
Цитата:
Код:
uses
  windows;
это раз
Цитата:
Код:
S:ansistring
Это два
Цитата:
Код:
C:pchar;
три
Цитата:
Код:
oemtocharbuff
4
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 06.03.2012, 22:28   #8
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Да уж, разгуляться негде. Теперь вообще не представляю, нафиг он нужен, уже морально устарел...
Все тривиальное просто
whatever вне форума Ответить с цитированием
Старый 06.03.2012, 23:11   #9
Paster Fob
Форумчанин
 
Аватар для Paster Fob
 
Регистрация: 06.02.2011
Сообщений: 105
По умолчанию

Цитата:
Сообщение от spein Посмотреть сообщение
проблема в кодировке. паскаль сохраняет в DOS кодировке. решений не знаю, но знаю, что в результате можно изменить кодировку и посмотреть файл
я делал прогу в free pascal,записывал данные в текстовый файл.При открытии блокнотом иероглифы.Открыл файл в notepad ++ выбрал кодировку и всё читается норм.
В Lasarus в настройках компилятора так же выбрал кодировку и текст в файл записывается и читается на русском языке.
Paster Fob вне форума Ответить с цитированием
Старый 07.03.2012, 10:18   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Hornet_nsk Посмотреть сообщение
Borland Turbo Pascal 7.0,
Винда XP
Паскаль русифицирован, раскладка переключается нормально, на экран русский текст выводит, но когда я пытаюсь текст написать в файл и открываю его блокнотом обычным, вместо русского шрифта появляется какая-то абракадабра.
Прочитал FAQ на нескольких форумах, везде советы как Паскаль русифицировать, но это не помогает сделать запись в файл русским шрифтом, сам-то Паскаль русскую раскладку видит.
Может кто-нибудь знает, что можно сделать в данной ситуации?
Как уже было абсолютно справедливо отмечено, Паскаль абсолютно нормально читает и пишет русские буквы в файлы, но, разумеется, в DOS кодировке (она же OEM, она же кодировка 866).

Прочитать такие файлы можно любым редактором, который понимает такую кодировку (начиная от встроенного редактора FAR commander, Total Commander и заканчивая Notepad++ и AkelPad).
если же, по какой-то скрытой причине нужно, чтобы текстовый файл всё таки был в кодировке ANSI (она же Windows-1251), тогда нужно сделать перекодировку символов из одной кодировки в другую (т.к. кодировка и одна и другая однобайтовая и таблицы есть, то это не составит большого труда. я не помню, был ли пример подобной функции здесь на форуме, но, если надо, легко напишу вас функцию перекодировки.)
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не отображается русский шрифт about_pooh БД в Delphi 11 10.04.2012 16:36
Модуль GRAPH портит русский при запуске .exe файла! Nemo-237 Паскаль, Turbo Pascal, PascalABC.NET 3 06.03.2011 22:59
В чём ошибка при создании файла? If-then-do Помощь студентам 6 24.09.2010 20:27
Проблема при создании файла (3CH) Livores Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 26.05.2010 17:01
Как вывести из текстового файла на экран русский текст? Mischa Помощь студентам 8 12.03.2008 06:23