Non mi sono posto mai questo problema, ma volendo manipolare un file di testo in UTF è possibile farlo con la STL?? Oppure mi devo rivolgere ad una libreria esterna???
Vincenzo1968
25-09-2008, 13:10
Ciao homer,
puoi appoggiarti a delle ottime librerie esterne:
http://utfcpp.sourceforge.net/
http://code.msdn.microsoft.com/UTF8Helpers
In alternativa, puoi scaricarti le specifiche:
http://www.unicode.org/
http://en.wikipedia.org/wiki/UTF-8
e implementare a mano le funzioni per gestire i vari formati.
Il codice seguente(in C), per esempio, legge un file di testo e restituisce il formato:
#include <stdio.h>
#define TF_ANSI 1
#define TF_UTF16LE 2 // UTF16 Little Endian
#define TF_UTF16BE 3 // UTF16 Big Endian
#define TF_UTF8 4
int LeggiTipoFile(const char *szFileName)
{
FILE * fp;
unsigned char byte1, byte2, byte3;
int numread;
fp = fopen(szFileName, "rb");
if ( fp == NULL )
return -1;
numread = fread(&byte1, 1, 1, fp);
if ( !numread ) // file vuoto;
{
fclose(fp);
return 0;
}
if ( byte1 == 0xFF ) // UTF16LE?
{
numread = fread(&byte2, 1, 1, fp);
if ( !numread )
{
fclose(fp);
return 0;
}
if ( byte2 == 0xFE )
{
fclose(fp);
return TF_UTF16LE;
}
else
{
fclose(fp);
return TF_ANSI;
}
}
if (byte1 == 0xFE) // UTF16BE?
{
numread = fread(&byte2, 1, 1, fp);
if ( !numread )
{
fclose(fp);
return 0;
}
if ( byte2 == 0xFF )
{
fclose(fp);
return TF_UTF16BE;
}
}
if (byte1 == 0xEF) // UTF8?
{
numread = fread(&byte2, 1, 1, fp);
if ( !numread )
{
fclose(fp);
return 0;
}
if ( byte2 == 0xBB )
{
numread = fread(&byte3, 1, 1, fp);
if ( !numread )
{
fclose(fp);
return 0;
}
if ( byte3 == 0xBF)
{
fclose(fp);
return TF_UTF8;
}
}
}
fclose(fp);
return TF_ANSI;
}
int main()
{
int typeFile;
printf("\n");
typeFile = LeggiTipoFile("c:\\temp\\prova.txt");
switch( typeFile )
{
case TF_ANSI:
printf("Il file e' ANSI\n\n");
break;
case TF_UTF16LE:
printf("Il file e' TF_UTF16LE\n\n");
break;
case TF_UTF16BE:
printf("Il file e' TF_UTF16BE\n\n");
break;
case TF_UTF8:
printf("Il file e' TF_UTF8\n\n");
break;
default:
printf("Errore!!!\n\n");
break;
}
return 0;
}
Se non sbaglio le librerie boost, che presto verranno integrate nello standard, hanno il supporto a unicode ed ai vari charset.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.