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

Tags : , ,