CblPHU4 |
Отправлено: 09 Августа, 2022 - 12:42:11
|
Наблюдатель
Покинул форум
Сообщений всего: 29
Дата рег-ции: Авг. 2022
Репутация: 0
|
Доброго времени суток, есть маленький код, который из блокнота считывает строчку, сохраняет ее в буфер, после чего через ctrl+v вставляет куда я покажу, и так пока файл не кончится
Если в файле английский текст, проблем никаких нету, но если русский, то появляются кракозябры
При чем, если использовать команду sendlanguage("00000409", 0); для изменения раскладку на русскую, то идут одни символы
ЗдеÑьруÑÑкийтекÑÑ‚
А если изменить раскладку на английский, то совсем другие символы
Здесьрусскийтекст
Как можно это исправить? Или подскажите как вместо использования буфера печатать русский текст из string
CODE:
//Чтение по целой строке
if (fopen ("spisok5.txt", "r")!=0)
{
string spisok;
tt:if (freadline(spisok)!=0)
{
sendlanguage("00000409", 0);
writeclipboard(spisok); // сохраняет в буфер строку
mousemove(1375,50);
mouse(LEFT);
keydown(CONTROL);
key('v');
keyup(CONTROL);
pause(500);
goto tt;
}
fclose();
}
(Отредактировано автором: 09 Августа, 2022 - 12:42:37) |
|
|
CblPHU4 |
Отправлено: 09 Августа, 2022 - 13:14:41
|
Наблюдатель
Покинул форум
Сообщений всего: 29
Дата рег-ции: Авг. 2022
Репутация: 0
|
Zireael пишет: Нужно прочитать весь файл и конвертировать текст из utf8 в ansi, используя функцию utf8toansi.
Тот же самый прикол
Написал текст в 1 строку на 2 языках, для наглядности
[img](для просмотра ссылки Вам необходимо авторизоваться) /img]
CODE:
if (fopen ("spisok5.txt", "r")!=0)
{
string spisok;
string F=utf8toansi (spisok);
tt:if (freadline(F)!=0)
{
writeclipboard(F); // сохраняет в буфер строку
messagebox(F);
goto tt;
}
fclose();
}
|
|
|
Zireael |
Отправлено: 09 Августа, 2022 - 14:24:14
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Потому что неправильно написан код.
Цитата: string spisok;
string F=utf8toansi (spisok);
Переменная spisok это пустая строка, т. е. в функцию utf8toansi передали пустую строку. И какой в этом смысл?
Сначала надо прочитать файл, а уже потом конвертировать текст.(Отредактировано автором: 09 Августа, 2022 - 14:25:21) |
|
|
CblPHU4 |
Отправлено: 09 Августа, 2022 - 14:45:18
|
Наблюдатель
Покинул форум
Сообщений всего: 29
Дата рег-ции: Авг. 2022
Репутация: 0
|
Zireael пишет: Потому что неправильно написан код.
Цитата: string spisok;
string F=utf8toansi (spisok);
Переменная spisok это пустая строка, т. е. в функцию utf8toansi передали пустую строку. И какой в этом смысл?
Сначала надо прочитать файл, а уже потом конвертировать текст.
spisok не является пустым
Тут же наверху строка, которая считывает строчку из выбранного файла и передает его в параметр string
Ну да ладно, я нашел решение проблемы))))
Прикол оказался в том, что сам блокнот сохраняет по умолчанию в кодировке UTC-8
Если открыть файл, то буквы русские, но когда я навожусь на него в папке, для предпросмотра, то видны как раз таки символы (Использую QTTabBar)
Нужно всего лишь "сохранить как" и в самом низу выбрать кодировку ANSI
Спасибо за уделенное время |
|
|
Zireael |
Отправлено: 09 Августа, 2022 - 15:51:20
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: spisok не является пустым
Тут же наверху строка, которая считывает строчку из выбранного файла и передает его в параметр string
Добавил комментарии, может так понятнее будет.
CODE:string spisok; // объявить переменную, в данном случае пустая строка
string F=utf8toansi (spisok); // перевести из utf8 в ansi, в данном случае переводить нечего, т. к. spisok пустая строка
tt:if (freadline(F)!=0) //прочитать строку
// т. е. в переменной F оригинальная строка из файла |
|
|
CblPHU4 |
Отправлено: 09 Августа, 2022 - 16:58:39
|
Наблюдатель
Покинул форум
Сообщений всего: 29
Дата рег-ции: Авг. 2022
Репутация: 0
|
Zireael пишет: Цитата: spisok не является пустым
Тут же наверху строка, которая считывает строчку из выбранного файла и передает его в параметр string
Добавил комментарии, может так понятнее будет.
CODE:string spisok; // объявить переменную, в данном случае пустая строка
string F=utf8toansi (spisok); // перевести из utf8 в ansi, в данном случае переводить нечего, т. к. spisok пустая строка
tt:if (freadline(F)!=0) //прочитать строку
// т. е. в переменной F оригинальная строка из файла
Я понял о чем ты, но в самом верху есть строчка
if (fopen ("spisok5.txt", "r"!=0)
Вот тебе инфа, если не понятно(для просмотра ссылки Вам необходимо авторизоваться) spisok не является пустым, потому что в него сразу записывается инфа
Зачем спорить если я запускаю код и он работает как надо на английском, а именно каждую строчку выводит по очереди из файла, а строчки выводятся потому что получается что spisok не пустой, правильно?
У меня лишь была проблема с русским языком, и это не потому что spisok якобы пустой, с какого-то вдруг колена, а потому что блт блокнот не в той кодировке работал
Запусти код и проверь сам, зачем спорить ни о чем |
|
|
Zireael |
Отправлено: 09 Августа, 2022 - 17:56:50
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: но в самом верху есть строчка
if (fopen ("spisok5.txt", "r" )!=0)
Которая обозначает открыть файл. И всё, тут никуда ничего не записывается. Ну да ладно, вам виднее.
Цитата: а потому что блт блокнот не в той кодировке работал
Начиная с win10, а может раньше, в блокноте кодировка utf8 без bom. |
|
|
|