кодировка putwchar / getwchar? - PullRequest
       7

кодировка putwchar / getwchar?

1 голос
/ 03 октября 2011

Я пишу код, который работает как в Windows, так и в Linux. Приложение работает со строками Unicode, и я надеюсь вывести их на консоль, используя общий код.

Помогут ли в этом дело putwchar и getwchar? Например, я могу предоставить значения символов Unicode для этих функций, и они оба будут отображать один и тот же символ в Linux и Windows?

Ответы [ 3 ]

3 голосов
/ 04 октября 2011

Вы собираетесь войти в мир боли.Постоянно * консоли nix предпочитают отправлять им данные char * в кодировке UTF-8.

С другой стороны, Windows использует UTF-16 для своих API-интерфейсов Unicode и консольных API-интерфейсов. Я полагаю, что это ограничено UCS2.

Возможно, вам нужно найти какой-нибудь библиотечный код, который абстрагирует вас от различий.У меня нет хороших рекомендаций для вас, но я уверен, что putwchar и getwchar не являются решением.

2 голосов
/ 04 октября 2011

Одним из многих способов их согласования является использование явных режимов преобразования в Windows:

#ifdef _WIN32
#include <fcntl.h>
#include <io.h>
#endif
#include <wchar.h>
#include <stdio.h>
#include <locale.h>
int main()
{
#ifdef _WIN32
   _setmode(_fileno(stdout), _O_WTEXT);
#else
    setlocale(LC_ALL, "en_US.UTF-8");
#endif
   fputws(L"Кошка\n", stdout);
}

протестировано с gcc 4.6.1 в Linux и Visual Studio 2010 в Windows

также _O_U8TEXT и _O_U16TEXT в Windows .Ваш пробег может отличаться.

0 голосов
/ 04 октября 2011

См. Справочную страницу putwchar в Linux. Он говорит, что поведение зависит от LC_CTYPE, и говорит: «Разумно ожидать, что putwchar () действительно напишет многобайтовую последовательность, соответствующую широкому символу wc». Аналогично, getwchar() должен прочитать многобайтовую последовательность из стандартного ввода и вернуть ее в виде широкого символа.

Не думайте, что они будут читать / записывать постоянное количество байтов, как в UCS2.

Все это говорит о том, что посимвольный ввод-вывод обычно не является самым быстрым решением, и когда вы начинаете оптимизацию, помните, что в Linux и Unix вы будете работать в UTF-8. *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...