2009-05-21 3 views
16

Я пытаюсь написать кросс-платформенный код i18n C++. Поскольку большинство Linux-систем предпочитают использовать UTF-8 в качестве кодировки символов, я думал, что я должен использовать строку в linux и wstring для Windows. Доступен ли tchar.h на linux? Что такое эквивалентная замена для tchar.h на Linux?tchar.h on linux

ответ

11

Вы можете найти this артикул, который пригодится. В частности, ближе к концу они немного обсуждают использование TCHAR и обработку кода Windows.

Статья реферирования является:

TCHAR будет переведен на широкий символьный тип данных при компиляции этого кода с GNU C Compiler (большинство портативных библиотек определяют TCHAR в их заголовках и обратитесь к wchar_t). Фактически, это было то, как я превратил свою программу на C++ в генератор анаграмм: я использовал стандартные строки C++, заполненные UTF-8, и загружал данные с помощью указателей, переданных в wchar_t, в библиотечные функции. Данные UTF-8, интерпретируемые как UTF-32, равны мусору (но это чрезвычайно полезно для обфускации данных и ошибок).

+4

Чтобы быть ясным, tchar.h является только Windows. Но довольно тривиально бросить твой собственный чар.х. – Naaff

0

Это на самом деле не так просто. string.size() даст вам количество байтов UTF-8, а не символов Unicode. Справедливости ради, wstring.size() не даст вам количество символов либо в присутствии суррогатов. Но на практике они не используются в обычных приложениях.

Итак, реальный ответ действительно зависит от того, зачем вам нужны строки Юникода. Это просто локализация пользовательского интерфейса? У вас есть пользовательский ввод? Вам нужно разобрать этот ввод?

0

Для создания моего централизованного источника 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); 

 Смежные вопросы

  • Нет связанных вопросов^_^