Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [FAQ] Каракули вместо русских букв, Обсуждаем статью для FAQ 
:(
    Опции темы
papam
  Дата 26.12.2007, 18:06 (ссылка) |   (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 2.2.2006
Где: Украина::Запорожь е

Репутация: 2
Всего: 4




M
archimed7592
Обсуждаем статью для FAQ. Тема разделена из Пишем FAQ.

Всем Доброго времени суток!

В данной статье речь идет о преобразовании символьной информации между двумя кодировками OEM и ANSI  в ОС Windows




Метод первый :

Локализация 



   Локализация в первую очередь используется в потоках ввода/вывода стандарьной библиотеки.
  Программа открывает для чтения существующий файл и закрывает его. В противном случае ругается. Имя файла вводит пользователь. Причем предполагается, что файл находится в текущем каталоге (каталоге с нашим проектом). У меня проект называется Listing5, поэтому я в этой самой папке заранее создал текстовый файлик с именем Файлик.txt 

   Начнем с функции setlocale. Она нужна для установки, изменения или определения программной локали и имеет такой вид:
Код

char* setlocale(int category, const char* locale);


category – категория (тип) изменения локали;

locale – имя (название) локали;

   Первый параметр может принимать шесть различных значений, нам же подойдут два: LC_ALL или LC_CTYPE
   При использовании первого варианта изменения коснутся всех категорий, при использовании второго варианта изменения коснутся функций, работающих с символами.
   Второй параметр представляет собой имя национальных особенностей. Это может быть просто имя, например, “French” или же имя вместе с указанным через точку номером кодовой страницы “French_Canada.1252” или же только номер кодовой страницы “.866” . Можно не вспоминать номер кодовой страницы и поставить “.OCP” – текущий номер для OEM, определенный в операционной системе.

   Дальше в программе  объявляется prompt - строка С-стиля. 
   Здесь же она инициализируется строковым литералом с префиксом L.
   Префикс L указывает, что данная строка является строкой символов из расширенного набора (Unicode) и имеет тип const wchar_t[]. Дальше объявляется строка типа wstring. Это тот же самый string, но состоящий не из ANSI-символов, а из Unicode-символов (тип которых wchar_t). 
   Затем идет диалог с пользователем и инициализация filename строчкой, которую вводит пользователь.
   Последняя часть – собственно действия над файлом. Объявляется указатель на структуру FILE, которая содержит в себе информацию о текущем состоянии потока; используется во всех потоковых операциях ввода/вывода.
   Затем файл открывается с помощью функции [B]_wfopen[/b] (версия функции fopen стандартной библиотеки, но для Unicode). Эта функция принимает в качестве параметров имя файла и атрибут. 
   В нашем случае это 
Код
filename.c_str()
 – метод c_str преобразует строку string/wstring в строчку типа const char* или const wchar_t* соответственно. Это всё потому что функция _wfopen требует именно С-строки в качестве параметров.       Второй же параметр – атрибут, ну знаете: для чтения, для записи и т.д.… Файл открывается только для чтения, поэтому у нас он L”r”. Не забываем ставить префикс L, поскольку в нашем случае все в Unicode!
   В случае ошибки функция 
Код
_wfopen 
 возвращает 0, что и проверяется в условии if … else и в зависимости от его выполнения- невыполнения выводится соответствующее сообщение. 
   Функция 
Код
fclose
 закрывает файл. 

Пример:
Код

#include<iostream>
#include<locale>

using namespace std;

int main()
{
    setlocale(LC_ALL,".OCP");

    wchar_t prompt[21] = L"Введите имя файла...";
    wstring filename;

    wcout<<prompt<<endl;
    wcin>>filename;

    FILE* myFile;
    if((myFile = _wfopen(filename.c_str(),L"r")) == 0)
    {
        wcout<<L"Не работает!(Файл не найден)\n";
    }
    else
    {
        wcout<<L"Работает\n";
        fclose(myFile);
    }
    return 0;

}

Пример 2:
Код

#include <fstream>

int main()
{
  std::wofstream file;
  
  // Создаем новую локаль на основе локали потока и задать её файловому потоку
  file.imbue( std::locale(file.getloc(), new my_codecvt) );

  // Теперь можно открывать файл и осуществлять вывод
    file.open( "output" );
    file << L"АБВ";
 
  return 0;
}

 Метод второй:
функции SetConsoleCP и SetConsoleOutputCP


Вот эти функции:

Код

BOOL SetConsoleCP(UINT wCodePageID);

BOOL SetConsoleOutputCP(UINT wCodePageID);

Разница между этими двумя функциями такая: 
Код
SetConsoleCP    -     устанавливает номер кодовой страницы для ввода с консоли 

SetConsoleOutputCP -  для вывода в консоль 


  Чтобы узнать текущий номер кодовой страницы консоли, мы можем использовать вот эти две функции:

Код

UINT GetConsoleCP(void);

UINT GetConsoleOutputCP(void);


  Эти функции не принимают параметров, а возвращают текущий номер кодовой страницы консоли. Разница между ними такая же, как и у двух предыдущих - все ясно из названия.
  Более то, чтобы не мучаться  с таблицами всех этих номеров, есть ещё две функции:
Код

UINT GetACP(void);

UINT GetOEMCP(void);

  Обе функции без параметров, первая возвращает текущий номер кодовой страницы в ANSI, вторая - в OEM.
  Следовательно, эти функции очень удобно использовать в качестве параметров для функций:
  
Код
 SetConsoleCP  и  SetConsoleOutputCP
  
Эти функции  работают не всегда. Смотрите, какие у них требования:

Client: Included in Windows XP, Windows 2000 Professional, and Windows NT Workstation.

Server: Included in Windows Server 2003, Windows 2000 Server, and Windows NT Server.

Пример:
Код

#include<iostream>
#include<windows.h>

using namespace std;
int main()
{
    cout<<"Каракули!!!\n";

    ::SetConsoleCP(::GetACP());
    ::SetConsoleOutputCP(::GetACP());

    cout<<"Еще каракули!!!\n";
    cout<<"И еще каракули!!!\n";

    return 0;
}

Метод третий:

функции CharToOem и OemToChar



Две API-шные функции: 
Код

BOOL CharToOem(LPCTSTR lpszSrc, LPSTR lpszDs);

lpszSrc- указатель на С-строку (строка в ANSI, которую мы хотим преобразовать в OEM)

lpszDs - указатель на строку, в которую будет помещен результат преобразования


Код

BOOL OemToChar(LPCSTR lpszSrc, LPTSTR lpszDst);

lpszSrc- указатель на С-строку (строку в OEM, которую мы хотим преобразовать в ANSI)

lpszDst - указатель на строку, в которую будет помещен результат преобразования


   В качестве первого параметра функции принимают С-строчку, которую преобразуем, в качестве второго - строчку, в которую будет помещен результат преобразования. Если эти функции используются как ANSI-функции, то в качестве обоих параметров можно передавать одну и ту же строку. В таком случае переданная функции строчка просто преобразуется в нужную нам кодировку (без какого-либо буфера).
Есть еще пара вариантов:

Код

BOOL CharToOemBuff(LPCTSTR lpszSrc, LPSTR lpszDst, DWORD cchDstLength);

BOOL OemToCharBuff(LPCTSTR lpszSrc, LPTSTR lpszDst, DWORD cchDstLengt);


   Работают также как и CharToOem/OemToChar, с той лишь разницей, что в качестве третьего параметра принимают количество символов в строке, которые надо преобразовать.

  
Код
CharToOem и OemToChar 
  
  Эти функции  преобразуют строчку из ANSI в OEM и наоборот. Это значит, что нам вообще не надо мучаться  с номерами кодовых страниц и т.п. Но проблема в том, что преобразуют они лишь одну строчку. А сколько нам в программе может понадобиться выводить и вводить из консоли строчки - неизвестно, но каждую строчку (русскую) надо преобразовывать, следовательно, каждый раз при этом надо будет вызывать эти функции. Получается код, довольно захламленный постоянными вызовами одних и тех же функций. Но что поделаешь…  

  Чтобы избежать неудобств при использовании таких функций, можете, скажем, написать свой собственный класс, который будет чем-то вроде оболочки для выполнения этих операций. Например, класс, в котором будут перегружены операторы ввода (operator >>) и вывода (operator <<) таким образом, чтобы перед самим вводом/выводом выполнять необходимое преобразование. Чтобы для практики такой класс имел значение и был полезен, надо постараться - учесть всевозможные переполнения буфера, преобразования типов и т.д. и т.п. В общем, безопасность и функциональность - очень важны. А если вдруг захочется  попробовать создать класс, производный от iostream, учтите, что в нём  виртуальных функций нет. На мой взгляд, для теоретических знаний языка С++ это может быть полезно, но для практики проще (а пожалуй и лучше) просто явно вызывать функцию 
Код
CharToOem
 или 
Код
OemToChar
.
Пример:
Код

#include<iostream>
#include<windows.h>

using namespace std;
int main()
{
    char ourString1[100] = "Каракули!!!\n";
    char ourString2[100] = "Еще каракули!!!\n";

    cout<<ourString1;
    cout<<ourString2;


    ::CharToOem(ourString1,ourString1);
    ::CharToOem(ourString2,ourString2);

    cout<<ourString1;
    cout<<ourString2;

    return 0;
}



Метод четвертый:

CString::AnsiToOem и CString::OemToANSI


   В MFC для работы со строками есть специальный класс CString. И у этого замечательного класса есть кроме других два метода:
Код

void AnsiToOem();

void OemToAnsi();

  Эти функции осуществляют необходимое преобразование над объектом класса CString. Класс CString хорош, с ним очень удобно работать и уж лучше всегда по мере возможности использовать его вместо строк стиля С (массива символов). Хотя можно, конечно, и шаблон string из STL (Standard template library - Стандартная Библиотека Шаблонов, она входит в стандартную библиотеку). 
Пример:
Код

int  main(int argc,char* argv[], char* envp[])// принимает аргументы если используются параметры командной строки
{
    int nRetCode = 0;

    if(!AfxWinInit(::GetModuleHandle(NULL),NULL, :: GetCommandLine(),0))
    {
         nRetCode = 1;
    }
    else
    {
        Cstring ourStr("Каракули");
        cout<<(LPCTSTR)ourStr<<endl;

        ourStr.AnsiToOem();
        cout<<(LPCTSTR)ourStr<<endl;

    }
    return nRetCode;
}
  



Это сообщение отредактировал(а) papam - 29.12.2007, 18:28
--------------------
No Fucking Future
PM MAIL ICQ   Вверх
nickless
Дата 26.12.2007, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: 2
Всего: 181



Предлагаю написать в начале статьи, что речь идёт исключительно о windows, а то в линуксе, благодаря utf-8, прекрасно работают программки вроде
Код
#include <iostream>

int main()
{
    std::cout << "Траляля" << std::endl;
    return 0;
}

 smile 


--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
papam
Дата 26.12.2007, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 2.2.2006
Где: Украина::Запорожь е

Репутация: 2
Всего: 4



Можно прикрепить эти примеры к статье, тут 3 скриншота к каждому методу,я забыл, прошу прощения

Это сообщение отредактировал(а) papam - 26.12.2007, 20:05

Присоединённый файл ( Кол-во скачиваний: 54 )
Присоединённый файл  Primeri.rar 27,05 Kb
--------------------
No Fucking Future
PM MAIL ICQ   Вверх
Dov
Дата 26.12.2007, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 11
Всего: 88



Цитата(papam @  26.12.2007,  17:06 Найти цитируемый пост)
Так что, метод, конечно, очень удобный, но ни хрена толком не работающий. А жаль…


papam, кроме тех требований, которые ты упомянул, есть ещё, как минимум, два, которые ты не назвал, а именно:
1. Нужно использовать оконный режим, а не полноэкранный.
2. Нужно установить в свойствах окна шрифт Lucida Console.

Может быть по-этому у тебя и не работало на других машинах.  smile 


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
archimed7592
Дата 26.12.2007, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 6
Всего: 93



papam, всё пока не читал - только пробежался.
Первые претензии:
1. Убрать из текста слова "отродья", "ни хрена", "мессага", "фига" и пр. Воспользоваться более культурными синонимами. Короче говоря, переработать текст, чтобы его можно было "отдавать в печать".
1.1. Исправить множественные опечатки(в т.ч., часто встречающийся "&lt;" вместо "<").

2. Оформить все строки кода(в т.ч. прототипы ф-ций) в тэги code.

3. Я примеры не смотрел, но, если они не большие, то добавить их в текст, причём не просто в конце, а к каждому методу отдельно.

All, просьба оценить техническую корректность текста, причём, подойти к этому нужно настолько критично, насколько это возможно smile.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
archimed7592
Дата 26.12.2007, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 6
Всего: 93



papam, как я вижу, ты немного подредактировал текст.

Смотри, если человек приходит с вопросом "почему у меня каракули в программе", то, очевидно, что он умеет создавать проект в своей любимой IDE(которая не обязательно будет MSVC), так что, думаю, что нужно убрать подробности о том, как создавать проект, какие строки и откуда нужно удалять и т.п.
Схема должна быть такой: описание метода, потом слова "Пример:" и сам пример, обрамлённый тегом code.

Причём, обязательно откорректировать примеры, убрав оттуда MS-специфичные вещи, аля _t, TCHAR и пр.(если метод не ориентирован исключительно на MSVC). main не должна принимать аргументы, если они ей не нужны.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
papam
Дата 26.12.2007, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 2.2.2006
Где: Украина::Запорожь е

Репутация: 2
Всего: 4



archimed7592,  историю убрать?
--------------------
No Fucking Future
PM MAIL ICQ   Вверх
archimed7592
Дата 26.12.2007, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 6
Всего: 93



papam, я пока подробно не читал. Не знаю. После НГ будем более подробно разбираться. Сейчас, к сожалению, времени совсем нет.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
zkv
Дата 27.12.2007, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 92



Цитата(archimed7592 @  26.12.2007,  23:45 Найти цитируемый пост)
я пока подробно не читал. Не знаю. После НГ будем более подробно разбираться. Сейчас, к сожалению, времени совсем нет. 

да, тоже самое, давайте до после НГ отложим.  smile 
PM MAIL   Вверх
zkv
Дата 27.12.2007, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 92



Цитата(nickless @  26.12.2007,  18:38 Найти цитируемый пост)
Предлагаю написать в начале статьи, что речь идёт исключительно о windows, а то в линуксе, благодаря utf-8, прекрасно работают программки вроде

да про это стоит упомянуть. 
для сведения, посмотри что пишет уважаемый baldina (помню кто-то использовал преобразование к unsigned в качестве решения вопроса)
решение с локалью думаю стоит вынести в первую очередь, и упомянуть хотя-бы о существовании std::locale

а такие вещи:
Цитата(papam @  26.12.2007,  18:06 Найти цитируемый пост)
Две API-шные функции: 
Выделить всёкод C++
1:
    
CharToOem 
и 
Выделить всёкод C++
1:
    
OemToChar
.
Выделить всёкод C++
1:
    
BOOL CharToOem(LPCTSTR lpszSrc, LPSTR lpszDs);


Выделить всёкод C++
1:
    
lpszSrc
 - указатель на С-строку (строка в ANSI, которую мы хотим преобразовать в OEM)

Выделить всёкод C++
1:
    
lpszDs
 - указатель на строку, в которую будет помещен результат преобразования

Выделить всёкод C++
1:
    
BOOL OemToChar(LPCSTR lpszSrc, LPTSTR lpszDst);


Выделить всёкод C++
1:
    
lpszSrc
 - указатель на С-строку (строку в OEM, которую мы хотим преобразовать в ANSI)

Выделить всёкод C++
1:
    
lpszDst
 - указатель на строку, в которую будет помещен результат преобразования

окучить бы не мешало..
Цитата(papam @  26.12.2007,  18:06 Найти цитируемый пост)
Пользуемся расширенным символьным набором - Unicode

разве локали можно использовать только вместе с юникодом?

Это сообщение отредактировал(а) zkv - 27.12.2007, 23:57
PM MAIL   Вверх
Winprogrammer
Дата 29.12.2007, 00:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 23.3.2006
Где: ::Россия.РСО-Алан ия.Владикавка

Репутация: нет
Всего: нет



papam
Цитата(papam @  26.12.2007,  18:06 Найти цитируемый пост)
 Первый параметр может принимать шесть различных значений, нам же подойдут два: LC_ALL или LC_CTYPE. 

опиши все параметры. Они могут пригодиться.
Цитата(papam @  26.12.2007,  18:06 Найти цитируемый пост)
Метод второй:
функции SetConsoleCP и SetConsoleOutputCP


Вот эти функции:

Сперва опиши в чем заключается второй метод. А потом уже приступай к описанию функций, как ты это сделал в первом методе.
Третий и четвертый методы имеют тот же недостаток оформления - нет описания.
Цитата(papam @  26.12.2007,  18:06 Найти цитируемый пост)
Две API-шные функции: 

Это функции какого API ???? API - это Application Programming Interface. Как таковых API много. Для опытного человека понятно, что это WinAPI. А для новичка - это тёмные дебри.
Цитата(papam @  26.12.2007,  18:06 Найти цитируемый пост)
С-строчку

Используй более оффициальный язык.

ЗЫ: В принципе статья - отличная! только ее надо "вылизать"! ;)

Вот пока все, что могу сказать. Но над статьей надо еще работать... работать... и работать... smile Удачи автору! ;)
--------------------
Я не понял Вашего вопроса, но я Вам на него отвечу…-----------
Uploading файлов без гемороя - это просто!!!
Winprogrammer.ifolder.ru
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
archimed7592
Дата 29.12.2007, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 6
Всего: 93



Что ж. Начну, наверное, с этой статьи. А точнее с первого метода(локаль).
Сразу предупрежу, что, даже если покажется, что я как-то грубо высказываюсь - это не означает, что я к Вам плохо отношусь. Можете считать, что я выражаю мысли новичка, который читает Вашу статью smile.


Цитата(papam @  26.12.2007,  18:06 Найти цитируемый пост)
В данной статье речь идет о преобразовании символьной информации между двумя кодировками OEM и ANSI  в ОС Windows

OEM - это что за кодировка такая? Неплохо было бы упомянуть.
ANSI - это что за кодировка? А Unicode мы в этой статье не рассматриваем?



Цитата(papam @  26.12.2007,  18:06 Найти цитируемый пост)
Программа открывает для чтения существующий файл и закрывает его. В противном случае ругается. Имя файла вводит пользователь. Причем предполагается, что файл находится в текущем каталоге (каталоге с нашим проектом). У меня проект называется Listing5, поэтому я в этой самой папке заранее создал текстовый файлик с именем Файлик.txt 

Какая ещё программа? Какой файл? Зачем ругаться? О чём вообще речь?


Цитата(papam @  26.12.2007,  18:06 Найти цитируемый пост)
Начнем с функции setlocale. Она нужна для установки, изменения или определения программной локали и имеет такой вид:

Отлично, а в каком заголовочном файле эта ф-ция объявлена?



Цитата(papam @  26.12.2007,  18:06 Найти цитируемый пост)
Выделить всёкод C++
1:
    
category
 – категория (тип) изменения локали;

Выделить всёкод C++
1:
    
locale
 – имя (название) локали;

Ммм. Не обязательно каждое слово оформлять в тэг code. Можно было бы либо просто не оформлять никак, либо выделить моноширинным шрифтом(предпочтительнее). К примеру так:
category – категория (тип) изменения локали.
[font=courier]category[/font] – категория (тип) изменения локали.


Цитата(papam @  26.12.2007,  18:06 Найти цитируемый пост)
В файле <locale> объявлен объект locale. Он контролирует национальные особенности, классификацию символов на буквы, цифры и т.д., устанавливает порядок следования символов, управляет видом вводимых и выводимых численных значений (даты, денежки и т.д. и т.п.).

Очень интересно, хорошо бы ещё понять к чему мне нужно было читать этот абзац.

Цитата(papam @  26.12.2007,  18:06 Найти цитируемый пост)
 Первый параметр
Цитата(papam @  26.12.2007,  18:06 Найти цитируемый пост)
Второй параметр
А ещё лучше - понять бы к чему нужен был предыдущий абзац между сигнатурой ф-ции и описанием её параметров.


Цитата(papam @  26.12.2007,  18:06 Найти цитируемый пост)
Дальше в программе  объявляется prompt - строка С-стиля. 
В какой программе? Вы о чём?

Цитата(papam @  26.12.2007,  18:06 Найти цитируемый пост)
 Здесь же она инициализируется строковым литералом с префиксом L.

Кем кем? Литералом? А это кто?

Цитата(papam @  26.12.2007,  18:06 Найти цитируемый пост)
 Затем файл открывается с помощью функции _wfopen (версия функции fopen стандартной библиотеки, но для Unicode).

Хнык-хнык. А мой компилятор, говорит, что не знает о такой ф-ции :'(.

Цитата(papam @  26.12.2007,  18:06 Найти цитируемый пост)
Не забываем ставить префикс L, поскольку в нашем случае все в Unicode!

А зачем нам юникод сдался? Мне что, из-за этих каракуль всю программу под юникод переписывать?

Цитата(papam @  26.12.2007,  18:06 Найти цитируемый пост)
Пример:

Я что-то не понял - пример для Си или для С++?

Цитата(papam @  26.12.2007,  18:06 Найти цитируемый пост)
Пример2:

Хто есть my_codecvt? Мой компилятор отказывается это компилировать. Хнык-хнык.


Теперь в общем и целом: повествование оформленно как описание примера. Пример почему-то идёт после самого описания. Зачем-то смешаны и Си и С++.

Пожелания(кроме процитированных багов):
1. перед самими методами в двух словах написать откуда вообще взялась проблема.
2. перед методами перечислить список методов с очень кратким описанием.
3. метод: сначала описание метода как такого, потом пример, потом описание примера.
4. в примерах не должно быть ничего лишнего(зачем там вообще понадобились файлы? а юникод?)


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
papam
Дата 29.12.2007, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 2.2.2006
Где: Украина::Запорожь е

Репутация: 2
Всего: 4



archimed7592,завтра постараюсь исправить все.
 
--------------------
No Fucking Future
PM MAIL ICQ   Вверх
archimed7592
Дата 17.1.2008, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 6
Всего: 93



papam, как дела со статьей продвигаются? smile


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
archimed7592
Дата 20.1.2008, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 6
Всего: 93




M
archimed7592
Так, papam пропал.
Есть желающие довести статью до ума?
Желающих прошу отписаться здесь.



--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1143 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.