Последние записи
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
- Взаимодействие через командную строку
- Перенести программу из Delphi в Lazarus
- Определить текущую ОС
- Автоматическая смена языка (раскладки клавиатуры)
- Сравнение языков на массивах. Часть 2
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
6th
Авг
Сравнение строк с разной кодировкой
Posted by Chas under c/c++, Пост-обзор
Ситуация такая: из файла загружается быза данных, с клавиатуры вводится слово для поиска и ищется в базе. Проблема в том, что даже если вводишь слово, которое заведомо есть, программа его не находит!
Решила, что проблема в кодировке, и испытала почти всевозможные варианты setlocale() — ничего не помогает! Что же делать?
Dogmat:
Так работает
#include
#include
#include
#include
#include
using namespace std;
int main(int argc, char *argv[])
{
//setlocale(0, "C");
ifstream fi1("d:\\iofiles\\a.txt"); //в файле находится слово "кириллица"
ofstream fo("d:\\iofiles\\b.txt"); //для проверки правильности перекодировки
string wordin;
string wordout;
cin >> wordout; //ASCII
fi1 >> wordin;
char *tmp = new char[wordout.size() + 1];
OemToCharA(wordout.c_str(), tmp); //(!!!)
wordout = tmp;
if (wordin == wordout)
cout << "Yra!!!\n";
else
cout << "Oh, no!!!\n";
fo << wordout;
cin.get();
cin.get();
return 0;
}[/code]
Обратите внимание на следущий фрагмент:
[code]
bool OemToCharA(LPCSTR *lpszSrc, LPSTR *lpszDst);
bool OemToCharW(LPCSTR *lpszSrc, LPWSTR *lpszDst);
#define LPWSTR *widechar_t;
#define LPSTR *char;
#define OemToChar OemToCharW;[/code]
Не ту функцию использовали. Используя заочно OemToCharW, где в качестве второго аргумента ожидается указатель на unicode строку, вы принудительно преобразуете указатель на char к указателю на wchar_t, получаете неправильный результат, но в правильной кодировке ))).
тема на форуме
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)