Пользователи жалуются, что на англиской винде у них часть интерфейса на русском языке выглядит как абракадабра.
Пишут:
Некорректная работа с кириллицей.
WinXP Eng при настройках Settings -> Control Panel ->Regional and Language Options -> Regional Options -> English (United States) русские слова отображаются крякозяблами. Причем не все, а только часть, некоторые выглядят нормально.
У себя поставил English в настройках, теперь у меня ВЕСЬ русский текст в приложении выглядит вот так:
Здравствуйте, eudo, Вы писали:
E>Пользователи жалуются, что на англиской винде у них часть интерфейса на русском языке выглядит как абракадабра.
E>Пишут: E>
E>Некорректная работа с кириллицей.
E>WinXP Eng при настройках Settings -> Control Panel ->Regional and Language Options -> Regional Options -> English (United States) русские слова отображаются крякозяблами. Причем не все, а только часть, некоторые выглядят нормально.
E>
E>У себя поставил English в настройках, теперь у меня ВЕСЬ русский текст в приложении выглядит вот так:
E>
E>Что делать в данной ситуации?
Спасибо, так работает. Есть правда небольшой баг: переключаемся на русский, запускаем приложение, вводим в поле ввода текст, видим его как абракадабру, переключаемся на английский потом опять на русский — теперь пишется нормально.
Здравствуйте, eudo, Вы писали:
E>Спасибо, так работает. Есть правда небольшой баг: переключаемся на русский, запускаем приложение, вводим в поле ввода текст, видим его как абракадабру, переключаемся на английский потом опять на русский — теперь пишется нормально.
CS>Можешь эту проблему воспроизвести в sciter.exe ?
Пересобрал в юникоде — не замечал больше.
И еще вопрос. С сервера получаю однобайтовый текст в кодировке cp1251. При передаче в скрипт конвертирую как-то так: aux::a2w(_recivedText.c_str()).
Так вот, если в винде стоит нормальная локаль (в данном случае русская) то все хорошо, в скрипте я вижу читабельный текст. Если меняю локаль на Английскую, вижу хрень. Видимо, нужно как-то выставить правильно локаль что-то вроде russian_russian, но не выходит что-то. Какие варианты?
Здравствуйте, eudo, Вы писали:
CS>>Можешь эту проблему воспроизвести в sciter.exe ?
E>Пересобрал в юникоде — не замечал больше.
E>И еще вопрос. С сервера получаю однобайтовый текст в кодировке cp1251. При передаче в скрипт конвертирую как-то так: aux::a2w(_recivedText.c_str()). E>Так вот, если в винде стоит нормальная локаль (в данном случае русская) то все хорошо, в скрипте я вижу читабельный текст. Если меняю локаль на Английскую, вижу хрень. Видимо, нужно как-то выставить правильно локаль что-то вроде russian_russian, но не выходит что-то. Какие варианты?
Здравствуйте, eudo, Вы писали:
E>Здравствуйте, eudo, Вы писали:
CS>>>Можешь эту проблему воспроизвести в sciter.exe ?
E>>Пересобрал в юникоде — не замечал больше.
E>>И еще вопрос. С сервера получаю однобайтовый текст в кодировке cp1251. При передаче в скрипт конвертирую как-то так: aux::a2w(_recivedText.c_str()). E>>Так вот, если в винде стоит нормальная локаль (в данном случае русская) то все хорошо, в скрипте я вижу читабельный текст. Если меняю локаль на Английскую, вижу хрень. Видимо, нужно как-то выставить правильно локаль что-то вроде russian_russian, но не выходит что-то. Какие варианты?
Ну во-первых посылать с сервера что-нибудь в кодировке отличной от utf-8 это себя не любить.
Вернее так — посылать данные можно в любой кодировке но только если есть механизм передачи на клиент этой самой кодировки.
В случае utf-8 в SDK есть конвертор utf2w — его и пользовать.
E>
E>setlocale(LC_ALL, "russian_russia.1251");
E>
setlocale() это ошибка эволюции. Использовать её не надо ибо она работает глобально.
Т.е. если у тебя скажем французкий windows то в одном случае тебе нужно принимать что-то в кодировке 1251 а через три строчки
тебе нужно перевести в unicode нечто (например содержимое ситемного EDITBOX) из системной кодировки 1252.
Если уже так припекло то можешь себе нарисовать нечто типа этого:
class mb2w
{
wchar_t local[16];
wchar_t* buffer;
unsigned int nu;
void init(const char* str, unsigned int n, int codepage)
{
nu = MultiByteToWideChar(codepage,0,str,n,0,0);
buffer = ( nu < (16-1) )? local: new wchar_t[nu+1];
MultiByteToWideChar(codepage,0,str,n,buffer,nu);
buffer[nu] = 0;
}
public:
explicit mb2w(const char* str, int codepage = CP_THREAD_ACP):buffer(0), nu(0)
{
if(str)
init(str, strlen(str),codepage);
}
explicit a2w(slice<char> s);
~a2w() { if(buffer != local) delete[] buffer; }
unsigned int length() const { return nu; }
operator const wchar_t*() { return buffer; }
};
CS>Ну во-первых посылать с сервера что-нибудь в кодировке отличной от utf-8 это себя не любить. CS>Вернее так — посылать данные можно в любой кодировке но только если есть механизм передачи на клиент этой самой кодировки.
Это да.
CS>В случае utf-8 в SDK есть конвертор utf2w — его и пользовать.
CS>И использовать как: