Я пытаюсь написать кросс-платформенный код i18n C++. Поскольку большинство Linux-систем предпочитают использовать UTF-8 в качестве кодировки символов, я думал, что я должен использовать строку в linux и wstring для Windows. Доступен ли tchar.h на linux? Что такое эквивалентная замена для tchar.h на Linux?tchar.h on linux
ответ
Вы можете найти this артикул, который пригодится. В частности, ближе к концу они немного обсуждают использование TCHAR и обработку кода Windows.
Статья реферирования является:
TCHAR будет переведен на широкий символьный тип данных при компиляции этого кода с GNU C Compiler (большинство портативных библиотек определяют TCHAR в их заголовках и обратитесь к wchar_t). Фактически, это было то, как я превратил свою программу на C++ в генератор анаграмм: я использовал стандартные строки C++, заполненные UTF-8, и загружал данные с помощью указателей, переданных в wchar_t, в библиотечные функции. Данные UTF-8, интерпретируемые как UTF-32, равны мусору (но это чрезвычайно полезно для обфускации данных и ошибок).
Это на самом деле не так просто. string.size() даст вам количество байтов UTF-8, а не символов Unicode. Справедливости ради, wstring.size() не даст вам количество символов либо в присутствии суррогатов. Но на практике они не используются в обычных приложениях.
Итак, реальный ответ действительно зависит от того, зачем вам нужны строки Юникода. Это просто локализация пользовательского интерфейса? У вас есть пользовательский ввод? Вам нужно разобрать этот ввод?
Для создания моего централизованного источника Windows я смог использовать файл tchar.h из Cygwin, найденный в папке cygwin \ usr \ include \ w32api.
Я на самом деле строю с помощью Android NDK. Для моих целей я сделал копию tchar.h и заплатил ее.
//#include <crtdefs.h>
#define _CRTIMP
//#define _strninc(_pc,_sz) (((_pc)+(_sz)))
// _CRTIMP size_t __cdecl __strncnt(const char *_Str,size_t _Cnt);
Чтобы быть ясным, tchar.h является только Windows. Но довольно тривиально бросить твой собственный чар.х. – Naaff