2009-05-21 17 views
16

Próbuję napisać kod IC18 na platformę i18n. Ponieważ większość systemów linuksowych woli używać UTF-8 jako kodowania znaków, pomyślałem, że powinienem używać napisu na linuksie i ciągnąć w systemie Windows. Czy tchar.h jest dostępny na Linuksie? Co to jest zastępczy zamiennik dla tchar.h w systemie Linux?tchar.h na Linuksie

Odpowiedz

11

Może Ci się przydać artykuł this. W szczególności pod koniec omawiają trochę o korzystaniu z TCHAR i radzeniu sobie z kodem Windows.

Artykuł podsumowania brzmi:

TCHAR będą tłumaczone na szeroki charakter typu danych podczas kompilowania tego kodu z GNU C Compiler (większość przenośnych bibliotek zdefiniować TCHAR w swoich nagłówkach i odnoszą się do wchar_t). W istocie w ten sposób zmieniłem program C++ w generator anagramów: użyłem standardowych ciągów C++ wypełnionych UTF-8 i zasiliłem dane wskaźnikami rzucanymi do wchar_t do funkcji bibliotecznych. Dane UTF-8 interpretowane jako UTF-32 to śmieci (ale jest to niezwykle przydatne do zaciemniania danych i błędów).

+4

Aby było jasne, tchar.h ma tylko system Windows. Ale dość banalne jest toczenie własnego tchar.h. – Naaff

0

To nie jest takie proste. string.size() da ci liczbę bajtów UTF-8, a nie znaki Unicode. Z całą słusznością, wstring.size() nie poda liczby znaków ani w obecności surogatów. Ale w praktyce te nie są używane w popularnych aplikacjach.

Tak więc prawdziwa odpowiedź naprawdę zależy od tego, dlaczego potrzebujesz ciągów Unicode. Czy to tylko lokalizacja interfejsu użytkownika? Czy masz dane wejściowe od użytkownika? Czy musisz przeanalizować to wejście?

0

Aby zbudować moje centryczne źródło Windowsa, mogłem użyć pliku tchar.h z pliku Cygwin znalezionego w folderze cygwin \ usr \ include \ w32api.

W rzeczywistości buduję przy użyciu Android NDK. Dla moich celów zrobiłem kopię tchar.h i załatałem to.

//#include <crtdefs.h> 

#define _CRTIMP 

//#define _strninc(_pc,_sz) (((_pc)+(_sz))) 
// _CRTIMP size_t __cdecl __strncnt(const char *_Str,size_t _Cnt);