Чтение и чтение файлов Unicode на C ++?

Может ли кто-нибудь представить простой пример для чтения и записи в файле Юникода символа Юникода?

    В linux я использую библиотеку iconv (link), которая является очень стандартной. Чрезмерно простая программа:

     #include  #include  #include  #define BUF_SZ 1024 int main( int argc, char* argv[] ) { char bin[BUF_SZ]; char bout[BUF_SZ]; char* inp; char* outp; ssize_t bytes_in; size_t bytes_out; size_t conv_res; if( argc != 3 ) { fprintf( stderr, "usage: convert from to\n" ); return 1; } iconv_t conv = iconv_open( argv[2], argv[1] ); if( conv == (iconv_t)(-1) ) { fprintf( stderr, "Cannot conver from %s to %s\n", argv[1], argv[2] ); return 1; } bytes_in = read( 0, bin, BUF_SZ ); { bytes_out = BUF_SZ; inp = bin; outp = bout; conv_res = iconv( conv, &inp, &bytes_in, &outp, &bytes_out ); if( conv_res >= 0 ) { write( 1, bout, (size_t)(BUF_SZ) - bytes_out ); } } iconv_close( conv ); return 0; } 

    Это слишком просто, чтобы продемонстрировать конверсию. В реальном мире у вас обычно есть две вложенные петли:

    • Один ввод для чтения, поэтому обращайтесь, когда его больше, чем BUF_SZ
    • Один конвертирующий вход для вывода. Помните, что если вы переходите с ascii на UTF-32LE, вы получите каждый байта iunput, равный 4 байтам вывода. Таким образом, внутренний цикл будет обрабатывать это путем проверки conv_res а затем проверки errno .

    попробуйте http://utfcpp.sourceforge.net/ . в ссылке есть вводный пример для чтения файла utf8, строковый.

    Если вы используете Windows. Используйте fgetws http://msdn.microsoft.com/en-us/library/c37dh6kf(VS.71).aspx, чтобы читать и использовать http://msdn.microsoft.com/en-us/library/t33ya8ky(VS. 71) .aspx для записи.

    Код примера приведен в приведенных ссылках.