Конвертировать из кодовой страницы 437 в Unicode с наддувом - PullRequest
0 голосов
/ 30 января 2019

Как я могу использовать boost::locale::conv::to_utf для преобразования строки CP437 в Unicode?

У меня есть std::string, который содержит строку в кодировке CP437 "äöü".Соответствующая кодировка UTF16: 0x00e4, 0x00f6, 0x00fc.Я попытался

std::wstring str_utf = boost::locale::conv::to_utf<wchar_t>(str_437, "CP437");

и

boost::locale::generator gen;
std::locale loc = gen.generate("CP437");
std::wstring str_utf = boost::locale::conv::to_utf<wchar_t>(str_437, loc);

преобразовать строку в строку Unicode, но это не сработало: первый метод вернул неправильные значения wchar_t 0x0004, 0x0014,0x0001 и второй метод не удался с abort() has been called.

Я также пробовал варианты строки "CP437", например, ".CP437", "cp437", ".cp437" и т. Д., Но ни один изони сработали.

Сначала я подумал, что, возможно, моя строка вообще не кодируется в CP437, но затем я преобразовал строку с использованием библиотеки ICU, и она успешно дала правильные значения UTF16 0x00e4, 0x00f6, 0x00fc.

Почему форсирование завершается неудачно, в то время как ICU успешно выполняется для той же строки?Нужно ли использовать разные идентификаторы кодовой страницы для повышения?

...