информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Портрет посетителяВсе любят мед
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Kik закрывается, все ушли на криптофронт 
 Sophos открывает Sandboxie 
 Большой вторник патчей от MS 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Я вообще то просил код, в котором ты получаешь строку. 19.11.09 09:22  Число просмотров: 2251
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
Я вообще то просил код, в котором ты получаешь строку.

> if (0 == lstrcmp(szLikeLocale, "ru"))
> {
> lstrcpy(szTitle, lpcszTitle);
> for (int i = 0, k = 0; szTitle[i]; k ++)
> {
> if (szTitle[i] < 0)
> {
> szTitle[k] = (szTitle[i] +
> 48) * 64 + szTitle[i + 1] + 48;
> i += 2;
> }
> else
> {
> szTitle[k] = szTitle[i];
> i++;
> }
> }
> szTitle[k] = 0;
> }
^^^^ Что это?!!
MultiByteToWideChar же!!!

> ret = SQLAllocHandle(SQL_HANDLE_STMT, hConn,
> &hStmt);
> if (SQL_SUCCESS != ret &&
> SQL_SUCCESS_WITH_INFO != ret)
> return FALSE;

> wsprintf(szQuery, "INSERT INTO index (url, title,
> locale) VALUES ('%s', '%s', %d)", lpcszLink2Blog, szTitle,
> dwLocale);
Что это? Почему wsprintf-у даешь char[] в качестве буфера? Почему строка формата char[]? Почему аргументы для %s типизированы (char *) в конце концов? Ну, пожалуйста, ну пиши на шарпе, а?

> ret = SQLExecDirect(hStmt, (SQLTCHAR *) szQuery,
> lstrlen(szQuery));
>
> if (SQL_SUCCESS != ret &&
> SQL_SUCCESS_WITH_INFO != ret)
> return FALSE;
> SQLFreeHandle(SQL_HANDLE_STMT, hStmt);
>
> return TRUE;
> }
>
---

>
> Хотелось бы вместо функции wsprintf поставить какую-нибудь
> другую функцию. чтобы в szQuery вставилась юникодная
> строка. Есть такая?
Ага, есть. wsprintf

PS: Ну если не шарп, то подумай хотя бы над использованием C++ и ADO вместо ODBC.
<programming>
[C++] Как правильно получить контент в кодировке UTF-8? 19.11.09 03:51  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
<"чистая" ссылка>
Наконец-то я созрел на переход с обычных строк к юникоду. Но вот беда: не могу разобраться, как сделать так, чтобы русские страницы в кодировке UTF-8 считывались в "читабльном" виде, а не в виде мусора.

Заменил в своей программе все char'ы на TCHAR'ы, LPSTR/LPCSTR на LPTSTRT/LPCTSTR. Но попрежнему вместо букв вижу мусор. Что делать?
[C++] А почему utf-8? 19.11.09 04:30  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> Наконец-то я созрел на переход с обычных строк к юникоду.
> Но вот беда: не могу разобраться, как сделать так, чтобы
> русские страницы в кодировке UTF-8 считывались в
> "читабльном" виде, а не в виде мусора.
MultiByteToWideChar

> Заменил в своей программе все char'ы на TCHAR'ы,
> LPSTR/LPCSTR на LPTSTRT/LPCTSTR. Но попрежнему вместо букв
> вижу мусор. Что делать?
Использовать utf-16
Пишу "каталогизатор" для blogspot.com, а там всё в кодировке... 19.11.09 05:27  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
Отредактировано 19.11.09 05:30  Количество правок: 1
<"чистая" ссылка>
Пишу "каталогизатор" для blogspot.com, а там всё в кодировке UTF-8 записано, поэтому и смотрю в сторону неё.

MultiByteToWideChar пробовал. Вроде работает, но когда пытаюсь вывести строку в MessageBox или сохранить в БД (Access) то мусор получается.

И ещё попутный вопрос: обязательно ли во всей программе строки менять на юникодовские, или можно только в нужной мне части. Например, я загружаю контент страницы в обычную char'овскую строку, а потом нужный кусок перевожу в юникод. Попробовал такую стратегию прикрутить, но пока безуспешно.
Ответ стандартный. Попробуй почитать документацию 19.11.09 06:40  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> Пишу "каталогизатор" для blogspot.com, а там всё в
> кодировке UTF-8 записано, поэтому и смотрю в сторону неё.
Откуда данные берешь? Загрузил наугад одну из страниц
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
Ни о чем не говорит? В частности "xhtml"?

> MultiByteToWideChar пробовал. Вроде работает, но когда
> пытаюсь вывести строку в MessageBox или сохранить в БД
> (Access) то мусор получается.
Ну давай код уже.

> И ещё попутный вопрос: обязательно ли во всей программе
> строки менять на юникодовские, или можно только в нужной
Вообще нет, но за ANSI уже пора лишать лицензии. Или взымать акциз какой нибудь, ибо ЗАДОЛБАЛИ.

> мне части. Например, я загружаю контент страницы в обычную
> char'овскую строку, а потом нужный кусок перевожу в юникод.
В случае с utf8 не забудь синхронизировать поток

> Попробовал такую стратегию прикрутить, но пока безуспешно.
Читай про макросы _UNICODE и UNICODE и то каким образом MessageBox превращается в MessageBoxA/MessageBoxW, а TCHAR - в char/wchar_t

PS: Я тебе по моему уже советовал попробовать писать на шарпе или VB. Серьезно, там таких проблем не возникает - плюсы, похоже, не для тебя.
Код 19.11.09 07:54  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
Отредактировано 19.11.09 07:55  Количество правок: 1
<"чистая" ссылка>
Сейчас пока остановился на топоровом варианте, где из юникода тупо русские символы распознаются. Но хотелось бы, чтобы отображались все символы.

BOOL InsertBlogInDB(LPCSTR lpcszLink2Blog, LPCSTR lpcszTitle, DWORD dwLocale)
{
	SQLHANDLE	hStmt;
	SQLRETURN	ret;
	char		szTitle[SIZE_TITLE];
	char		szQuery[MAXSIZE_QUERYSTR];

	if (0 == lstrcmp(szLikeLocale, "ru"))
	{
		lstrcpy(szTitle, lpcszTitle);
		for (int i = 0, k = 0; szTitle[i]; k ++)
		{
			if (szTitle[i] < 0)
			{
				szTitle[k] = (szTitle[i] + 48) * 64 + szTitle[i + 1] + 48;
				i += 2;
			}
			else
			{
				szTitle[k] = szTitle[i];
				i++;
			}
		}
		szTitle[k] = 0;
	}

	ret = SQLAllocHandle(SQL_HANDLE_STMT, hConn, &hStmt);
	if (SQL_SUCCESS != ret && SQL_SUCCESS_WITH_INFO != ret)
		return FALSE;

	wsprintf(szQuery, "INSERT INTO index (url, title, locale) VALUES ('%s', '%s', %d)", lpcszLink2Blog, szTitle, dwLocale);

	ret = SQLExecDirect(hStmt, (SQLTCHAR *) szQuery, lstrlen(szQuery));

	if (SQL_SUCCESS != ret && SQL_SUCCESS_WITH_INFO != ret)
		return FALSE;
	SQLFreeHandle(SQL_HANDLE_STMT, hStmt);

	return TRUE;
}

---

Хотелось бы вместо функции wsprintf поставить какую-нибудь другую функцию. чтобы в szQuery вставилась юникодная строка. Есть такая?
Я вообще то просил код, в котором ты получаешь строку. 19.11.09 09:22  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
Я вообще то просил код, в котором ты получаешь строку.

> if (0 == lstrcmp(szLikeLocale, "ru"))
> {
> lstrcpy(szTitle, lpcszTitle);
> for (int i = 0, k = 0; szTitle[i]; k ++)
> {
> if (szTitle[i] < 0)
> {
> szTitle[k] = (szTitle[i] +
> 48) * 64 + szTitle[i + 1] + 48;
> i += 2;
> }
> else
> {
> szTitle[k] = szTitle[i];
> i++;
> }
> }
> szTitle[k] = 0;
> }
^^^^ Что это?!!
MultiByteToWideChar же!!!

> ret = SQLAllocHandle(SQL_HANDLE_STMT, hConn,
> &hStmt);
> if (SQL_SUCCESS != ret &&
> SQL_SUCCESS_WITH_INFO != ret)
> return FALSE;

> wsprintf(szQuery, "INSERT INTO index (url, title,
> locale) VALUES ('%s', '%s', %d)", lpcszLink2Blog, szTitle,
> dwLocale);
Что это? Почему wsprintf-у даешь char[] в качестве буфера? Почему строка формата char[]? Почему аргументы для %s типизированы (char *) в конце концов? Ну, пожалуйста, ну пиши на шарпе, а?

> ret = SQLExecDirect(hStmt, (SQLTCHAR *) szQuery,
> lstrlen(szQuery));
>
> if (SQL_SUCCESS != ret &&
> SQL_SUCCESS_WITH_INFO != ret)
> return FALSE;
> SQLFreeHandle(SQL_HANDLE_STMT, hStmt);
>
> return TRUE;
> }
>
---

>
> Хотелось бы вместо функции wsprintf поставить какую-нибудь
> другую функцию. чтобы в szQuery вставилась юникодная
> строка. Есть такая?
Ага, есть. wsprintf

PS: Ну если не шарп, то подумай хотя бы над использованием C++ и ADO вместо ODBC.
I would use ADO along with C++. But C# is the best 19.11.09 20:02  
Автор: void <Grebnev Valery> Статус: Elderman
<"чистая" ссылка>
1






Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2019 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach