2

UnicodeファイルでUnicode文字を読み書きするための簡単な例を誰かが提供できますか?

4

3 に答える 3

2

http://utfcpp.sourceforge.net/を試してください。リンクには、utf8 ファイルを 1 行ずつ読み取るための入門的な例があります。

于 2011-10-20T10:09:10.310 に答える
1

Linux では、非常に標準的なiconv(リンク)ライブラリを使用します。非常に単純なプログラムは次のとおりです。

#include <stdio.h>
#include <stdlib.h>
#include <iconv.h>

#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;
}

これは、変換を示すには非常に単純です。現実の世界では、通常、2 つの入れ子になったループがあります。

  • 読み取り入力は 1 つなので、BUF_SZ を超える場合に処理します。
  • 入力を出力に変換する 1 つ。ascii から UTF-32LE に変換する場合、各 iinput バイトが 4 バイトの出力になることを覚えておいてください。したがって、内側のループはこれを調べconv_resてからチェックすることでこれを処理しerrnoます。
于 2011-10-20T11:44:51.650 に答える
0

Windowsを使用している場合。fgetws http://msdn.microsoft.com/en-us/library/c37dh6kf(VS.71).aspxを使用して、http://msdn.microsoft.com/en-us/library/t33ya8ky(VS 。 71).aspxを書き込みます。

サンプルコードは、提供されているリンクにあります。

于 2010-10-11T10:54:11.460 に答える