C++ 用C++;?

C++ 用C++;?,c++,unicode,unicode-string,C++,Unicode,Unicode String,有人能提供一个简单的例子来读写Unicode文件中的Unicode字符吗?如果您使用的是Windows。 使用fgetws进行读取 和FPUTW来写 示例代码在提供的链接中。请尝试。该链接有一个介绍性示例,可以逐行读取utf8文件。在linux上,我使用非常标准的库。过于简单的程序是: #include <stdio.h> #include <stdlib.h> #include <iconv.h> #define BUF_SZ 1024 int main

有人能提供一个简单的例子来读写Unicode文件中的Unicode字符吗?

如果您使用的是Windows。 使用fgetws进行读取 和FPUTW来写

示例代码在提供的链接中。

请尝试。该链接有一个介绍性示例,可以逐行读取utf8文件。

在linux上,我使用非常标准的库。过于简单的程序是:

#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;
}
#包括
#包括
#包括
#定义BUF_SZ 1024
int main(int argc,char*argv[])
{
柴斌[BUF_SZ];
char bout[BUF_SZ];
char*inp;
字符*输出;
ssize_t bytes_in;
输出字节的大小;
大小转换;
如果(argc!=3)
{
fprintf(stderr,“用法:从转换为\n”);
返回1;
}
iconv_t conv=iconv_open(argv[2],argv[1]);
如果(conv==(iconv_t)(-1))
{
fprintf(stderr,“无法从%s转换到%s\n”,argv[1],argv[2]);
返回1;
}
字节_in=read(0,bin,BUF_SZ);
{
bytes_out=BUF_SZ;
inp=bin;
输出=回合;
conv_res=iconv(conv,&inp,&bytes_输入,&outp,&bytes_输出);
如果(conv_res>=0)
{
写入(1,about,(size_t)(BUF_SZ)-bytes_out);
}
}
iconv_关闭(conv);
返回0;
}
这对于演示转换来说过于简单。在现实世界中,通常会有两个嵌套循环:

  • 一个读取输入,所以当其超过BUF_SZ时处理
  • 一种将输入转换为输出的方法。请记住,如果要从ascii转换为UTF-32LE,则每个iunput字节都将是4个字节的输出。因此,内部循环将通过检查
    conv\u res
    然后检查
    errno
    来处理此问题

什么格式?UTF-8、UTF-16或UTF-32?如果是UTF-16,三种可能的UTF-16格式中的哪一种?大端、小端或由BOM指定?以及,在哪个平台上?
wchar\u t
大小并不总是一样的:在Windows上,您通常在内部以UTF-16 LE存储字符串,而在Linux上则以UTF-8(带有
char
)或UTF-32(
wchar\u t
)存储字符串。UTF-16和32都存储在16 BOM和平台Windows以及OS XP SP2中