Как сохранить ASCII как Unicode (UTF-16LE) в C / C ++ (cpp)?

Как вы помните, в блокноте Windows есть возможность кодирования в функции «Сохранить как …»: как ASCII (по умолчанию), UTF-8, Unicode и Big Endian.
Мне нужно сделать программу, которая делает что-то с текстом файла ASCII .txt и сохраняет результат как файл Unicode .txt.

  • Как я искал, Unicode здесь означает UTF-16LE (без спецификации). Если я не прав — поправьте меня, пожалуйста.
  • Я попытался прочитать из ASCII как char и преобразовать его в wchar_t один за другим — успешно, но у меня есть UTF-8 вместо UTF-16LE. Вот как я это делаю:

    int result = (int)input_char; //input_chat is char from ASCII
    while(result<0) result+=256;
    wchar_t output_wchar = wchar_t(result);
    

Этот код работает файл и не теряет символы ASCII.

  • Также я знаю, что UTF-16LE кодируется как U + хххх код. Итак, если предыдущий шаг верен, моя проблема: как поместить код U + hhhh в wchar_t в c ++?

1

Решение

Если ваш источник ASCII и wchar_t имеет размер 2 байта, и вы находитесь в системе с прямым порядком байтов (что я думаю, что это безопасное предположение), на самом деле нет ничего, кроме неявного преобразования.

wchar_t output_char = input_char;

Тогда вы можете просто взорвать wchar_ts туда, куда вы хотите их написать.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]