sciter font
От: eudo Мухосранск  
Дата: 27.08.10 09:45
Оценка:
Пользователи жалуются, что на англиской винде у них часть интерфейса на русском языке выглядит как абракадабра.

Пишут:
Некорректная работа с кириллицей.
WinXP Eng при настройках Settings -> Control Panel ->Regional and Language Options -> Regional Options -> English (United States) русские слова отображаются крякозяблами. Причем не все, а только часть, некоторые выглядят нормально.


У себя поставил English в настройках, теперь у меня ВЕСЬ русский текст в приложении выглядит вот так:



Что делать в данной ситуации?
Съешь еще этих мягких французских булок...
Re: sciter font
От: c-smile Канада http://terrainformatica.com
Дата: 27.08.10 18:44
Оценка:
Здравствуйте, 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>Что делать в данной ситуации?


Либо указывать encoding твоих html файлов

<head>
  <meta http-equiv="Content-Type" content="text/html;charset=windows-1251" >
  ...
</head>


Либо сохранять их как utf-8 с BOM в начале. В notepad.exe -> save -> encoding utf-8.
Re[2]: sciter font
От: eudo Мухосранск  
Дата: 30.08.10 12:52
Оценка:
CS>
CS><head>
CS>  <meta http-equiv="Content-Type" content="text/html;charset=windows-1251" >
CS>  ...
CS></head>
CS>


Спасибо, так работает. Есть правда небольшой баг: переключаемся на русский, запускаем приложение, вводим в поле ввода текст, видим его как абракадабру, переключаемся на английский потом опять на русский — теперь пишется нормально.
Съешь еще этих мягких французских булок...
Re[3]: sciter font
От: c-smile Канада http://terrainformatica.com
Дата: 30.08.10 18:54
Оценка:
Здравствуйте, eudo, Вы писали:

E>Спасибо, так работает. Есть правда небольшой баг: переключаемся на русский, запускаем приложение, вводим в поле ввода текст, видим его как абракадабру, переключаемся на английский потом опять на русский — теперь пишется нормально.


приложение компилируется в UNICODE?
Re[4]: sciter font
От: eudo Мухосранск  
Дата: 30.08.10 19:08
Оценка:
CS>приложение компилируется в UNICODE?

В нстройках стоит multibyte
Съешь еще этих мягких французских булок...
Re[5]: sciter font
От: c-smile Канада http://terrainformatica.com
Дата: 31.08.10 00:23
Оценка:
Здравствуйте, eudo, Вы писали:

CS>>приложение компилируется в UNICODE?


E>В нстройках стоит multibyte


Можешь эту проблему воспроизвести в sciter.exe ?
Re[6]: sciter font
От: eudo Мухосранск  
Дата: 06.09.10 16:17
Оценка:
CS>Можешь эту проблему воспроизвести в sciter.exe ?

Пересобрал в юникоде — не замечал больше.

И еще вопрос. С сервера получаю однобайтовый текст в кодировке cp1251. При передаче в скрипт конвертирую как-то так: aux::a2w(_recivedText.c_str()).
Так вот, если в винде стоит нормальная локаль (в данном случае русская) то все хорошо, в скрипте я вижу читабельный текст. Если меняю локаль на Английскую, вижу хрень. Видимо, нужно как-то выставить правильно локаль что-то вроде russian_russian, но не выходит что-то. Какие варианты?
Съешь еще этих мягких французских булок...
Re[7]: sciter font
От: eudo Мухосранск  
Дата: 06.09.10 16:29
Оценка:
Здравствуйте, eudo, Вы писали:

CS>>Можешь эту проблему воспроизвести в sciter.exe ?


E>Пересобрал в юникоде — не замечал больше.


E>И еще вопрос. С сервера получаю однобайтовый текст в кодировке cp1251. При передаче в скрипт конвертирую как-то так: aux::a2w(_recivedText.c_str()).

E>Так вот, если в винде стоит нормальная локаль (в данном случае русская) то все хорошо, в скрипте я вижу читабельный текст. Если меняю локаль на Английскую, вижу хрень. Видимо, нужно как-то выставить правильно локаль что-то вроде russian_russian, но не выходит что-то. Какие варианты?

  class a2w 
  {
    wchar_t* buffer;
  public:
    explicit a2w(const char* str):buffer(0)
    { 
      if(str)
      {
        size_t n = strlen(str);
        size_t nu = mbstowcs(0,str,n);
        buffer = new wchar_t[n+1];
        mbstowcs(buffer,str,n);
        buffer[nu] = 0;
      }
    }

    ~a2w() {  delete[] buffer;  }
    operator const wchar_t*() { return buffer; }

  };


и вот так вот:

setlocale(LC_ALL, "russian_russia.1251");


работает нормально
Съешь еще этих мягких французских булок...
Re[8]: sciter font
От: c-smile Канада http://terrainformatica.com
Дата: 06.09.10 17:51
Оценка:
Здравствуйте, 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; }
  };


И использовать как:

std::wstring s = mb2w("какой-то текст", 1251);


Где 1251 это номер взятый из последней колонки этой таблицы:
http://msdn.microsoft.com/en-us/library/aa752010(VS.85).aspx
Re[9]: sciter font
От: eudo Мухосранск  
Дата: 06.09.10 18:39
Оценка:
CS>Ну во-первых посылать с сервера что-нибудь в кодировке отличной от utf-8 это себя не любить.
CS>Вернее так — посылать данные можно в любой кодировке но только если есть механизм передачи на клиент этой самой кодировки.

Это да.

CS>В случае utf-8 в SDK есть конвертор utf2w — его и пользовать.


CS>И использовать как:


спасибо
Съешь еще этих мягких французских булок...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.