Как конвертировать WCHAR to CHAR?
Как конвертировать WCHAR to CHAR, и как конвертировать строку Unicode в строку Ansi.
charTOoem (там с регитсром точно не помню)
charTOoem (там с регитсром точно не помню)
MultiByteToWideChar
MultiByteToWideChar
а чем CharToOem нехорош :) ?
а чем CharToOem нехорош :) ?
А тем что она не сможет транслировать символы из UNICODE в ANSI.
перегонят в ANSI, а функция btowc, ей обратная, но эти функции зависят от региональных установок.
в Visual C++ 6.0 есть функция int wctob(wchar c )
есть функция wctomb(char,t_wchar)
Как конвертировать WCHAR to CHAR, и как конвертировать строку Unicode в строку Ansi.
Вопрос 1: какой язык используется???
Вопрос 2: если это библиотека, то на каком языке пищется приложение, которое пользует ее?
Вопрос3: Если - это С++ то что за глупые вопросы, а если пишешь на VBA смотри MSDN!
Ссылка с MSDN:
WCHAR 16-bit Unicode character. For more information, see Character Sets Used By Fonts.
This type is declared in Winnt.h as follows:
typedef wchar_t WCHAR;
Пробуй юзать: BOOL CharToOem(LPCTSTR lpszSrc,LPSTR lpszDst);
Вопрос 2: если это библиотека, то на каком языке пищется приложение, которое пользует ее?
Вопрос3: Если - это С++ то что за глупые вопросы, а если пишешь на VBA смотри MSDN!
Ссылка с MSDN:
WCHAR 16-bit Unicode character. For more information, see Character Sets Used By Fonts.
This type is declared in Winnt.h as follows:
typedef wchar_t WCHAR;
Пробуй юзать: BOOL CharToOem(LPCTSTR lpszSrc,LPSTR lpszDst);
Во во, я посмотрел бы на тебя, в первую очередь идет wchar_t , которую чартуоем никак не переваривает:
wchar_t* ascii = L"Hello мир!!!";
CharToOem(ascii,ascii);
error C2664: 'CharToOemA' : cannot convert parameter 1 from 'wchar_t *' to 'LPCSTR'
во вторых
wctomb && wcstombs не помогают, они конечно переводят строку в анси стринг, но дальнейшее отображение русского языка обречено на провал
wchar_t* wstr = L"Hello мир!!!";
char* ascii = new char[wcslen(wstr) + 1];
wctomb( ascii, *wstr); //, wcslen(wstr) );
//CharToOem(ascii,ascii); // убрать коммент для проверки
MessageBox(NULL,ascii,"строки АНСИ",0); // русский текст каракулями
В общем такие вот реалии жизни :))))
И где тут глупый вопрос теперь?
PS в общем тема снова открыта, у кого какие идеи есть по этому поводу?
{
wchar_t* wstr = L"Hello мир!!!";
char* ascii = new char[wcslen(wstr) + 1];
wctomb( ascii, *wstr);
return ascii;
}
char* asAnsi()
{
wchar_t* wstr = L"Hello мир!!!";
char* ansi = new char[wcslen(wstr) + 1];
for(UINT i=0;i<wcslen(wstr)/2;i++)
{
int srca = wstr;
if(srca>=int(L"а") && srca<=int(L"я"))
ansi = int("a") + (srca - int(L"а"));
else
if(srca>=int(L"А") && srca<=int(L"Я"))
ansi = int("А") + (srca - int(L"А"));
else
{
ansi = (char)wstr;
if(wstr == 0)
break;
}
}
return ansi;
}
жалко конечн что никто не успел за это время что-то подсказать, поэтому татам:
{
wchar_t* wstr = L"Когда Вадик открыл варежку, его ожидало большое удивление.";
UINT lenght = wcslen(wstr) +1;
char* ansi = new char[lenght];
for(UINT i=0;i<lenght;i++)
{
int srca = wstr;
if(srca>=1072 && srca<1104)
{
if((srca - 1072)>15) //р=224
ansi = (209 + (srca - 1073));// small fix (1072 + 1)
else
ansi = (160 + (srca - 1072));
}
else
if(srca>=1040 && srca<1072)
ansi = (128 + (srca - 1040));
else
ansi = (char)wstr;
}
return ansi;
}
Да кста, забыл сказать, это всё дело в кодировке cp866, надеюсь кому-л пригодится.