Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Китайский Big5. Проблема перекодировки в Unicode 
V
    Опции темы
neosapient
Дата 6.8.2008, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 16.8.2006

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



Сижу уже неделю - никак орешек не разгрызть.

Есть БД, которая написана НЕ в Юникоде.  Судя по всему она создавалаcь через ascii. Потом в нее встроили Big5.
Есть клиентский терминал, который подключается к серваку. В зависимости от того какая винда - руссифицированная или китаефицированая данные будут отображаться в windows-1251 или big5.
Вообще, выглядит ужасно, когда таблицы смешаны. Либо китайские слова записаные в Big5 русской машине превращаются в белебирду. Либо русские слова записаные в window-1251 на китайской машине превращаются в белебирду (для китайца). 

Но это было вступление... 

Есть такой город - Пикин  smile 
Иероглиф на китайком выглядет как user posted image
(два иероглифа)

Если смотреть через клиентский терминал с русской кодировкой, то выглядит вот так user posted image
(те же два иероглифа - четыре char значения: 0xB1  0xB1  0xA9 0xBE  )


Привожу код программы
Код

// main.cpp
#define UNICODE
#include <windows.h>
#include "resource.h"

HINSTANCE hInst;

int OnInit(HWND hDlg)
{
    char str[6] = { 0xB1, 0xB1, 0xBE, 0xA9, 0 ,0};
    //char str[6] = {'±', '±', 'ѕ', '©', 0 ,0};    
    
    WCHAR text [3] ={0};
    MultiByteToWideChar(20936, 0, str, 6, text, 3);  // 20936- кодовая страница Big5

    if(SetDlgItemText(hDlg,IDC_LABEL,text))return FALSE;
    return TRUE;
}

LRESULT CALLBACK DlgMainProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    PAINTSTRUCT ps;
    HDC dc;
    switch( message )
    {
    case WM_INITDIALOG:
        OnInit(hDlg);
        break;   
    case WM_PAINT:
        dc = BeginPaint(hDlg, &ps);
        EndPaint(hDlg, &ps);
        break;    
    case WM_COMMAND:
        switch (LOWORD(wParam))
        {
        case IDCLOSE:
        case IDCANCEL:
            EndDialog(hDlg, LOWORD(wParam));
            return TRUE;
        }
        break;         
    case WM_DESTROY :
        PostQuitMessage(0);
        return 0;
    }    
    return 0;
}

int APIENTRY WinMain(HINSTANCE hInstance,
                  HINSTANCE hPrevInstance,
                  LPSTR lpCmdLine, int nCmdShow)

{
    hInst=hInstance;
    DialogBox(hInst,MAKEINTRESOURCE(ID_MAIN),0,(DLGPROC)DlgMainProc);
    return 0;
}


но ничего путного не выходит

Подскажите, как правильно конвертировать Big5 -> Unicode ?

Это сообщение отредактировал(а) neosapient - 6.8.2008, 18:50

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  TestUnicode.rar 3,27 Kb
PM MAIL   Вверх
neosapient
Дата 6.8.2008, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 16.8.2006

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



Тема закрыта.
1) Надо использовать кодировку 20936 ( сначала думал про 10002 )
2) Перепутал порядок char-ов. Правильный порядок 0xB1, 0xB1, 0xBE, 0xA9

Это сообщение отредактировал(а) neosapient - 6.8.2008, 18:51
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

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


 




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


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

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