Форум программистов, компьютерный форум CyberForum.ru

Char *(UTF-8) -> char *(ANSI) - C++

Восстановить пароль Регистрация
 
16 / 16 / 1
Регистрация: 09.03.2013
Сообщений: 65
22.03.2014, 17:52     Char *(UTF-8) -> char *(ANSI) #1
Есть строка в кодировке UTF-8(если не ошибаюсь) типа char *
Вот так ее я вижу в MSVC++10 - комментарии(оригинал - комментарии)
C++
1
char sInvalid[64] = "комментарии";
Как преобразовать ее в кодировку ANSI? Т.е результат должен быть такой:
C++
1
char sValid[64] = "комментарии";
Или такой
C++
1
wchar_t sValid[64] = "комментарии";
------
Пробовал так:
C++
1
2
3
4
wchar_t sValid[64];
char sInvalid[64] = "комментарии";
 
memcpy(sValid, sInvalid, 64);
В результате получаю корейские символы
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.03.2014, 17:52     Char *(UTF-8) -> char *(ANSI)
Посмотрите здесь:

C++ error C2664: sprintf: невозможно преобразовать параметр 1 из 'const char *' в 'char *'
(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const& C++
C++ Ошибка в cannot convert char * to char вроде поправил теперь выводит ересь(
C++ UTF-8 - русские символы в char посимвольно
C++ масив Char (Windows-1251, ASCII, UTF-8)
C++, UTF-8, char C++
C++ Различное поведение функции которая копирует строки с char* t и char t[]
array char* to char* (значения массива указателей в один указатель) C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Убежденный
Системный программист
 Аватар для Убежденный
14209 / 6224 / 987
Регистрация: 02.05.2013
Сообщений: 10,374
Завершенные тесты: 1
22.03.2014, 20:34     Char *(UTF-8) -> char *(ANSI) #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Сначала вызывайте MultiByteToWideChar.
Получите строку в кодировке UTF-16.
А затем из этой UTF-16 можно попробовать выполнить
конвертацию в нужную кодировку - WideCharToMultiByte.
16 / 16 / 1
Регистрация: 09.03.2013
Сообщений: 65
23.03.2014, 16:25  [ТС]     Char *(UTF-8) -> char *(ANSI) #3
Убежденный, спасибо, получилось. Только при использовании UTF-16 выдавало ошибку, использовал UTF-8
Вот код, может быть пригодится:
C++
1
2
3
4
5
6
7
8
char sInvalid[] = "comments | комментарии";//комментарии
 
int size = strlen(sInvalid)+1;
wchar_t *wsValid = new wchar_t[size];
char *sValid = new char[size];
    
MultiByteToWideChar(CP_UTF8, 0, sInvalid, -1, wsValid, size);
WideCharToMultiByte(CP_ACP, NULL, wsValid, -1, sValid, size, NULL, NULL);
Yandex
Объявления
23.03.2014, 16:25     Char *(UTF-8) -> char *(ANSI)
Ответ Создать тему
Опции темы

Текущее время: 12:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru