Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
1 / 1 / 2
Регистрация: 18.12.2013
Сообщений: 239
1

Как исправить ошибку с русским текстом

04.11.2015, 12:25. Просмотров 981. Ответов 8
Метки нет (Все метки)

Если ввожу логин английскими то все работает нормально, а если ввожу логин русскими, то происходит какой то глюк
с прочтением русского текста. Причем, если ввожу пароль рускими буквами, то такого не происходит. Заметил, что при вводе логина русскими буквами в начале выполнения программы-сохраняются левые символы, а при проверке на правильность ввода читаются корректно. Подскажите пжлст в чем причина?

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
program Project1;
 {$APPTYPE CONSOLE}
type TUser = class
  private
    fLogin: string;
    fPassword: string;
    procedure setLogin(newlogin: string);
    procedure setPassword(newpass: string);
  published
    property Login: string read fLogin write setLogin;
    property Password: string read fPassword write setPassword;
    function Connect: boolean;
end;
procedure TUser.setLogin(newlogin: string);
begin
 if newlogin <>'' then fLogin:=newlogin
   else writeln('Error! Login is void!');
end;
procedure TUser.setPassword(newpass: string);
begin
 if Length(newpass)>3 then fPassword:=newpass
   else writeln('Error! Password is too short!');
end;
function TUser.Connect:boolean;
var
 s,p: string;
begin
 writeln('Введите имя пользователя:');
 readln(s);
 writeln('Введите пароль:');
 readln(p);
 result:= (s=fLogin) and (p=fPassword);
end;
var
 User: TUser;
 s,p: string;
begin
 User:=TUser.Create;
  writeln('Create username');
 readln(s);
 User.Login:=s;
 writeln('Create password');
 readln(p);
 User.Password:=p;
 writeln('Username is: '+User.Login);
 writeln('Password is: '+User.Password);
 writeln('Try to login...');
 while User.Password<>'' do begin
   if User.Connect then begin
     writeln('All Ok.');
     break;
   end else writeln('Incorrect data. Try again!');
 end;
 User.Destroy;
 readln;
end.
0
Миниатюры
Как исправить ошибку с русским текстом  
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.11.2015, 12:25
Ответы с готовыми решениями:

Blob с русским текстом
Всем привет! Есть csv файл, который записан в базе в blob. Нужно распарсить каждую строчку, взяв...

Как работать с русским текстом в ASP.NET и ASP одновременно?
Сначала я обратился со следующим вопросом: Выполняется следующий код (база MSSQL2000) &lt;code&gt;...

JSON с русским текстом в юникоде
Экспериментирую как можно было бы выводить данные в json-формате непосредственно в файл с двумя...

idhttp - работа с русским текстом
Проблема такая strRead = Http1-&gt;Get(strURL); русские буквы считываются каракулями - как их...

8
251 / 162 / 24
Регистрация: 22.08.2014
Сообщений: 1,595
Записей в блоге: 1
04.11.2015, 13:33 2
Ansistring не помогает?
0
1 / 1 / 2
Регистрация: 18.12.2013
Сообщений: 239
05.11.2015, 07:22  [ТС] 3
Нет, попробовал, но результат тот же.
0
251 / 162 / 24
Регистрация: 22.08.2014
Сообщений: 1,595
Записей в блоге: 1
05.11.2015, 08:31 4
Напечатай что там на экране
Цитата Сообщение от mserg1972 Посмотреть сообщение
в начале выполнения программы-сохраняются левые
0
1 / 1 / 2
Регистрация: 18.12.2013
Сообщений: 239
05.11.2015, 10:28  [ТС] 5
Скрин приложен вроде к теме.
0
13036 / 5822 / 1705
Регистрация: 19.09.2009
Сообщений: 8,807
05.11.2015, 11:16 6
mserg1972, консольный ввод/вывод надо переключить на ту же кодовую страницу, что и редактор, в котором написан текст программы - CP1251 (Windows-1251).
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
program Project1;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils, Windows;
 
var
  S : String;
begin
  {Переключение окна консоли на кодовую страницу CP1251 (Win-1251).
  Если после переключения русские буквы показываются неверно,
  следует открыть системное меню консольного окна - щелчком мыши в левом
  верхнем углу окна консоли и выбрать:
  Свойства - закладка "Шрифт" - выбрать шрифт: "Lucida Console".}
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);
 
  Write('Задайте текст: ');
  Readln(S);
  Writeln('Вы ввели текст: ', S);
 
  Readln;
end.
1
1 / 1 / 2
Регистрация: 18.12.2013
Сообщений: 239
05.11.2015, 13:06  [ТС] 7
Попробовал оба варианта но результат тот же.
Интересно то, что при выполнении предложенного вами кода:
1. При указании кодировке в коде программы - текст все равно кракозябры
2. При выборе в консоли шрифта-ваш пример работает корректно.

Но в моем примере все равно это не помогает, даже при изменении в консоли.
Почему ?

Приложил скан 1 варианта и скан, если меняю шрифт в консоли при выполнении моего кода.
0
Миниатюры
Как исправить ошибку с русским текстом  
Изображения
 
1086 / 372 / 88
Регистрация: 31.03.2012
Сообщений: 1,020
06.11.2015, 03:47 8
Цитата Сообщение от mserg1972 Посмотреть сообщение
При выборе в консоли шрифта-ваш пример работает корректно.
Возьми исходники русский язык в консоли и подключи к своей программе модуль CyrConsole

Не по теме:

работает только от Vista и выше

1
13036 / 5822 / 1705
Регистрация: 19.09.2009
Сообщений: 8,807
06.11.2015, 08:22 9
Лучший ответ Сообщение было отмечено mserg1972 как решение

Решение

Цитата Сообщение от mserg1972 Посмотреть сообщение
1. При указании кодировке в коде программы - текст все равно кракозябры
2. При выборе в консоли шрифта-ваш пример работает корректно.
Если в предустановках консоли Windows не задан шрифт Lucida Console или Consolas, то, да, при запуске придётся вручную выбирать какой-то из этих шрифтов:
Цитата Сообщение от Mawrat Посмотреть сообщение
Delphi
1
2
3
4
5
6
begin
  {Переключение окна консоли на кодовую страницу CP1251 (Win-1251).
  Если после переключения русские буквы показываются неверно,
  следует открыть системное меню консольного окна - щелчком мыши в левом
  верхнем углу окна консоли и выбрать:
  Свойства - закладка "Шрифт" - выбрать шрифт: "Lucida Console".}
Чтобы каждый раз не задавать шрифт вручную, можно задать его в предустановках консоли Windows. Для этого надо открыть консольное окно (запустив любую консольную программу) - в левом верхнем углу окна открыть системное меню - выбрать пункт "Умолчания" - перейти на вкладку "Шрифт" - в списке выбрать шрифт Lucida Console или Consolas.

В модуле, который предложил Joeymax, делаются подобные действия. Сначала для консольного ввода/вывода устанавливается кодовая страница CP1251. А затем - устанавливается шрифт Lucida Console:
Delphi
1
2
3
4
5
initialization
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);
  SetConsoleFont(14, 'Lucida Console');
end.
Но надо иметь в виду, что API функция задания шрифта SetCurrentConsoleFontEx() из kernel32.dll, которая вызывается в теле SetConsoleFont(), появилась в библиотеке, начиная с Windows Vista. Т. е., в прежних версиях Windows, например, в Windows XP, автоматическая установка шрифта работать не будет.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.11.2015, 08:22

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Работа с русским текстом в linux
Пишу консольное приложение в Code::Blocks на Ubuntu 15.04. Выводит он русский текст и без всяких...

Проблема с русским текстом в форме
С некоторых пор введенный по-русски текст из формы передается в таком виде...

Сохранение вебстраницы с русским текстом
написал код:using System; using System.Collections.Generic; using System.ComponentModel; using...

SELECT не находит строку с русским текстом
Есть база данных в кодировке utf8: Структура 1 id int(12) UNSIGNED Нет Нет ...

При сохранение из Mathcad 15 в 11 проблема с русским текстом
При сохранение документа из Mathcad 15 в Mathcad 11 пропадает русский текст, вместо него &quot;?&quot;. ...

Preg_replace не работает с русским текстом и case insensetive
Здравствуйте! Как я понял, тема известная. Гугл, в основном, выдает ссылки на темы как минимум...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.