Подтвердить что ты не робот

Преобразование UTF-16 в UTF-8 под Windows и Linux, в C

Мне было интересно, есть ли рекомендованный "крест" метод Windows и Linux с целью преобразования строк из UTF-16LE в UTF-8? или нужно использовать разные методы для каждой среды?

Мне удалось найти несколько ссылок на "iconv", но для somreason я не могу найти образцы базовых преобразований, например, - преобразование wchar_t UTF-16 в UTF-8.

Любой может порекомендовать метод, который был бы "крест", и если вы знаете ссылки или руководство с образцами, очень оценили бы его.

Спасибо, Doori Bar

4b9b3361

Ответ 1

Спасибо, ребята, мне удалось решить "кросс" окна и требования к Linux:

  • Загружено и установлено: MinGW и MSYS
  • Загрузили исходный пакет libiconv
  • Скомпилировано libiconv через MSYS.

Что об этом.

Ответ 2

Измените кодировку на UTF-8 с помощью PowerShell:

powershell -Command "Get-Content PATH\temp.txt -Encoding Unicode | Set-Content -Encoding UTF8 PATH2\temp.txt"

Ответ 4

Если вы не хотите использовать ICU,

Ответ 5

wchar_t *src = ...;
int srclen = ...;
char *dst = ...;
int dstlen = ...;
iconv_t conv = iconv_open("UTF-8", "UTF-16");
iconv(conv, (char*)&src, &srclen, &dst, &dstlen);
iconv_close(conv);

Ответ 6

Я тоже столкнулся с этой проблемой, я ее разрешаю, используя повысить библиотеку локалей

try
{           
    std::string utf8 = boost::locale::conv::utf_to_utf<char, short>(
                        (short*)wcontent.c_str(), 
                        (short*)(wcontent.c_str() + wcontent.length()));
    content = boost::locale::conv::from_utf(utf8, "ISO-8859-1");
}
catch (boost::locale::conv::conversion_error e)
{
    std::cout << "Fail to convert from UTF-8 to " << toEncoding << "!" << std::endl;
    break;
}

Функция boost:: locale:: conv:: utf_to_utf пытается конвертировать из буфера, который кодируется UTF-16LE в UTF-8, Функция boost:: locale:: conv:: from_utf пытается конвертировать из буфера, который кодируется UTF-8 в ANSI, убедитесь, что кодировка правильная (здесь я использую кодировку для Latin-1, ISO-8859-1).

Еще одно напоминание: в Linux std:: wstring имеет длину 4 байта, но в Windows std:: wstring имеет длину 2 байта, поэтому лучше не использовать std:: wstring для хранения буфера UTF-16LE.

Ответ 7

Там также utfcpp, который является только библиотекой заголовка.