Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / WideCharToMultiByte с CP_UTF8 возвращает строку в неизвестной кодировке( / 11 сообщений из 11, страница 1 из 1
06.10.2017, 15:59
    #39532349
chikanok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WideCharToMultiByte с CP_UTF8 возвращает строку в неизвестной кодировке(
Добрый день.

На одной из машин, с Win7 Pro русская.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
std::string WideToMultiByte(uint32_t dst_encoding, const std::wstring& str){
	int ret = WideCharToMultiByte(static_cast<UINT>(dst_encoding), 0, str.c_str(), str.size(), NULL, 0,NULL,NULL);
	if (0 == ret) ThrowWin32Exception(L"WideCharToMultiByte step1");
	std::unique_ptr<CHAR> buf(new CHAR[ret]);
	ret = WideCharToMultiByte(static_cast<UINT>(dst_encoding), 0, str.c_str(), str.size(), buf.get(), ret, NULL, NULL);
	if (0 == ret) ThrowWin32Exception(L"WideCharToMultiByte step2");
	return std::string(buf.get(),ret);
}

auto result = WideToMultiByte(CP_UTF8, L"ФЕЛИКС-Р Ф");


result содержит строку в непонятной кодировке(содержимое прикрепил в файле).

а если выполнить
Код: plaintext
1.
auto result = WideToMultiByte(1251, L"ФЕЛИКС-Р Ф");


то на выходе получаю utf8 текст.

Как такое может быть? что с этим делать?)
...
Рейтинг: 0 / 0
06.10.2017, 17:06
    #39532393
Cerebrum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WideCharToMultiByte с CP_UTF8 возвращает строку в неизвестной кодировке(
Какой результат будет если сконвертировать строку из примера при помощи
StringToUtf8A
отсюда
http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1263703&msg=20637426
...
Рейтинг: 0 / 0
06.10.2017, 17:09
    #39532398
Cerebrum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WideCharToMultiByte с CP_UTF8 возвращает строку в неизвестной кодировке(
chikanokа если выполнить
Код: plaintext
1.
auto result = WideToMultiByte(1251, L"ФЕЛИКС-Р Ф");


то на выходе получаю ...

Что такое 1251 ?

Почитай документацию на функцию WideCharToMultiByte

там нет никаких 1251
...
Рейтинг: 0 / 0
06.10.2017, 17:31
    #39532414
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WideCharToMultiByte с CP_UTF8 возвращает строку в неизвестной кодировке(
chikanokКак такое может быть?

Очень просто: у тебя мусор на входе, а вовсе не то, что ты думаешь. Литералы не так просты
как кажется.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
06.10.2017, 17:38
    #39532418
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WideCharToMultiByte с CP_UTF8 возвращает строку в неизвестной кодировке(
Cerebrumтам нет никаких 1251
неправда - номер кодовой страницы(в т ч 1251) или одна из констант CP_xxx
...
Рейтинг: 0 / 0
06.10.2017, 17:47
    #39532430
Cerebrum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WideCharToMultiByte с CP_UTF8 возвращает строку в неизвестной кодировке(
ИзопропилCerebrumтам нет никаких 1251
неправда - номер кодовой страницы(в т ч 1251) или одна из констант CP_xxx
Согласен, здесь я не прав
...
Рейтинг: 0 / 0
06.10.2017, 18:15
    #39532449
chikanok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WideCharToMultiByte с CP_UTF8 возвращает строку в неизвестной кодировке(
Cerebrum Какой результат будет если сконвертировать строку из примера при помощи
StringToUtf8A
отсюда
http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1263703&msg=20637426

c StringToUtf8W на выходе тоже самое.
...
Рейтинг: 0 / 0
06.10.2017, 18:28
    #39532458
Cerebrum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WideCharToMultiByte с CP_UTF8 возвращает строку в неизвестной кодировке(
chikanokCerebrumКакой результат будет если сконвертировать строку из примера при помощи
StringToUtf8A
отсюда
http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1263703&msg=20637426

c StringToUtf8W на выходе тоже самое.
значит на машине кодировка 1251 не кодировка установленная по умолчанию.
Зайди в настройки локали и принудительно выстави русскую локаль.
Если не поможет, то проверь, что у тебя в реестре в ветке NLS (см. скриншот)
...
Рейтинг: 0 / 0
06.10.2017, 18:41
    #39532465
chikanok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WideCharToMultiByte с CP_UTF8 возвращает строку в неизвестной кодировке(
Всем спасибо!

Проблема решилась добавлением параметра /source-charset:utf-8 в командную строку компилятора.
...
Рейтинг: 0 / 0
06.10.2017, 18:43
    #39532467
chikanok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WideCharToMultiByte с CP_UTF8 возвращает строку в неизвестной кодировке(
Похоже суть в том что исходники в utf8 а компилятор их читал как 1251.
...
Рейтинг: 0 / 0
06.10.2017, 18:46
    #39532468
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WideCharToMultiByte с CP_UTF8 возвращает строку в неизвестной кодировке(
"Ми же вас предупреждаль..." (с)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / WideCharToMultiByte с CP_UTF8 возвращает строку в неизвестной кодировке( / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]