Tag: SO2 – 1920 – 3 – Unicode e TCHAR v.7.pdf
SO2 – Caracteres e suporte para unicode em Windows/Visual Studio
Bibliografia:
What are TCHAR, WCHAR, LPSTR, LPWSTR, LPCTSTR (etc.)? – +infos(LINK)
Windows System Programming, 4t edition, Johnson M. Hart, Addison Wesley, 2010 – capitulo 2
Os caracteres e o unicode em Windows com Visual Studio:
O unicode permite que:
tem um formato de caracteres multi-byte -> wchar_t
é adequado para todas as línguas
existem vários encondings possíveis: Windows UTF-16 (caracteres de 16 bits), UTF-32 (4 bytes), UTF-8,..
É o tipo de encoding que está a ser usado que permite saber o sizeof(qualquer coisa) , e isto vai afectar a portabilidade do código fonte.
No visual studio podemos fazer uso da macro TCHAR, em que char pode ser usado (se estiver configurado para ANSI/Multi-byte charset)) ou wchar_t (se estiver configurado para unicode)
#include <windows.h> #include <tchar.h> #include <fcntl.h> #include <io.h> #include <stdio.h> #define MAX 256 int _tmain(int argc, LPTSTR argv[]) { TCHAR str[MAX], result[MAX] = TEXT("Olá! Este programa é para aceitar UNICODE. Insira \'fim\' para sair\n"); unsigned int i; #ifdef UNICODE _setmode(_fileno(stdin), _O_WTEXT); _setmode(_fileno(stdout), _O_WTEXT); #endif do { _tprintf(result); fflush(stdin); _fgetts(str, MAX, stdin); str[_tcslen(str) - 1] = '\0'; for (i = 0; i < _tcslen(str); i++) str[i] = _totupper(str[i]); _stprintf_s(result, MAX, TEXT("Frase:%s, Tamanho:%d\n"), str, _tcslen(str)); } while (_tcsicmp(TEXT("FIM"), str)); return 0; }
Para se manter o máximo de portabilidade do código fonte deve-se:
evitar menções e uso explicito de tamanho de caracteres
usar as macro que são convertidas para as funções adequadas consoante o tamanho de carácter em uso
Aquando do uso das funções de biblioteca em C:
deve fazer-se uso ds funções _tcs ou equivalente
_tcslen em vez de strlen ou _wcslen
Nas strings para se fazer uso de compatibilidade ou portabilidade