Преобразование Unicode big endian в Unicode
От: Аноним  
Дата: 13.08.07 11:16
Оценка:
Подскажите, пожалуйста, есть ли какие — нибудь Win API функции, которые помогут преобразовать текст с Unicode big endian кодировкой к обычному Unicode тексту или же придется делать самому руками?

Спасибо,
Виталий
Re: Преобразование Unicode big endian в Unicode
От: korzh.pavel Россия  
Дата: 13.08.07 12:38
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Подскажите, пожалуйста, есть ли какие — нибудь Win API функции, которые помогут преобразовать текст с Unicode big endian кодировкой к обычному Unicode тексту или же придется делать самому руками?


"Unicode big endian" такого понятия в природе нет.
Unicode это, грубо говоря просто большая таблица. Есть также форматы передачи unicode — UTF (Unicode transformation format), они бывают UTF8, UTF16, UTF32.
Вот UTF16, UTF32 как раз и бывают big-endian, little-endian.

Учитывая вышесказанное, твой вопрос мне непонятен. Что для тебя есть "Unicode big endian" и "обычный Unicode"?
Re[2]: Преобразование Unicode big endian в Unicode
От: Кодт Россия  
Дата: 13.08.07 13:44
Оценка: +1
Здравствуйте, korzh.pavel, Вы писали:

KP>Учитывая вышесказанное, твой вопрос мне непонятен. Что для тебя есть "Unicode big endian" и "обычный Unicode"?


Думаю, что просто надо перевертеть из UTF16-BE в UTF16-LE. Повордно прочитать и обменять у каждого ворда байты.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re[3]: Преобразование Unicode big endian в Unicode
От: vita5555  
Дата: 13.08.07 15:16
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Думаю, что просто надо перевертеть из UTF16-BE в UTF16-LE. Повордно прочитать и обменять у каждого ворда байты.


Т.е. через Win API не получится, только руками?

Виталий
Re[4]: Преобразование Unicode big endian в Unicode
От: korzh.pavel Россия  
Дата: 13.08.07 15:22
Оценка:
Здравствуйте, vita5555, Вы писали:

V>Здравствуйте, Кодт, Вы писали:


К>>Думаю, что просто надо перевертеть из UTF16-BE в UTF16-LE. Повордно прочитать и обменять у каждого ворда байты.


V>Т.е. через Win API не получится, только руками?


да, ручками придётся делать.
Re[4]: Преобразование Unicode big endian в Unicode
От: Кодт Россия  
Дата: 13.08.07 16:42
Оценка:
Здравствуйте, vita5555, Вы писали:

V>Т.е. через Win API не получится, только руками?


Руками это очень просто.
struct flipbytes
{
    WCHAR operator()(WCHAR wc) const
    {
        return MAKEWORD(HIBYTE(wc), LOBYTE(wc));
    }
};
struct flipbytes_inplace
{
    void operator()(WCHAR& wc) const
    {
        wc = MAKEWORD(HIBYTE(wc), LOBYTE(wc));
    }
};

std::transform(src, src+len, dst, flipbytes()); // из одной строки в другую
std::transform(str, str+len, str, flipbytes()); // прямо по исходной строке
std::for_each(str, str+len, flipbytes_inplace()); // тоже прямо по исходной строке
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re: Преобразование Unicode big endian в Unicode
От: c-smile Канада http://terrainformatica.com
Дата: 13.08.07 20:18
Оценка: 16 (1)
Здравствуйте, Аноним, Вы писали:

А>Подскажите, пожалуйста, есть ли какие — нибудь Win API функции, которые помогут преобразовать текст с Unicode big endian кодировкой к обычному Unicode тексту или же придется делать самому руками?


MultiByteToWideChar(1201,0,(LPCSTR)utf16be, utf16be_length_in_bytes, out_utf16le, utf16le_buffer_size_in_wchars);
Re[2]: Преобразование Unicode big endian в Unicode
От: Кодт Россия  
Дата: 14.08.07 14:55
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>
CS>MultiByteToWideChar(1201.....
CS>


Во! Точно. Блин, не мог никак найти номер этой кодовой страницы, поэтому и не советовал.
А поскольку у нас форум С++, а не WinAPI, то ещё стоит упомянуть libiconv.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.