CString. Конвертация UTF8 в Windows-1251

В С++ вопрос преобразования типов встает очень часто по той простой причине что язык жёстко контролирует типы переменных. В программах сочитающих MFC, STL и пару других библиотек встречаются просто чудовищные конструкции. А если ко всему прочему требуется изменить кодировку...

Для того чтобы в следующий раз не проводить изыскания по запросу "CString. Конвертация UTF8 в Windows-1251" публикую решение этого вопроса из своего последнего проекта.

  1. CStringA UTF16to1251(const CStringW& utf16)
  2. {
  3. CStringA utf8;
  4. int len = WideCharToMultiByte(1251, 0, utf16, -1, NULL, 0, 0, 0);
  5. if (len>1)
  6. {
  7. char *ptr = utf8.GetBuffer(len-1);
  8. if (ptr) WideCharToMultiByte(1251, 0, utf16, -1, ptr, len, 0, 0);
  9. utf8.ReleaseBuffer();
  10. }
  11. return utf8;
  12. }
  13.  
  14. CStringW UTF8toUTF16(const CStringA& utf8)
  15. {
  16. CStringW utf16;
  17. int len = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0);
  18. if (len>1)
  19. {
  20. wchar_t *ptr = utf16.GetBuffer(len-1);
  21. if (ptr) MultiByteToWideChar(CP_UTF8, 0, utf8, -1, ptr, len);
  22. utf16.ReleaseBuffer();
  23. }
  24. return utf16;
  25. }
  26.  
  27. CStringA UTF8to1251(const CStringA& utf8)
  28. {
  29. return(UTF16to1251(UTF8toUTF16(utf8)));
  30. }
Читайте в блоге

Многострочные заголовки в jqGrid
jQuery доступ к IFRAME
PHP. Преобразование таблицы в картинку. Создание информеров.

Метки: cpp

Комментарии:

Войдите на сайт, чтобы оставить комментарий