任何人都可以提供一个简单的示例来在 Unicode 文件中读取和写入 Unicode 字符吗?
1371 次
3 回答
2
试试http://utfcpp.sourceforge.net/。该链接有一个介绍性示例,可以逐行读取 utf8 文件。
于 2011-10-20T10:09:10.310 回答
1
在 linux 上,我使用非常标准的iconv
(link)库。一个过于简单的程序是:
#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 时处理
- 一种将输入转换为输出。请记住,如果您从 ascii 转换为 UTF-32LE,您最终会得到每个输入字节为 4 个字节的输出。所以内部循环将通过检查
conv_res
然后检查来处理这个问题errno
。
于 2011-10-20T11:44:51.650 回答
0
如果您使用的是 Windows。使用 fgetws http://msdn.microsoft.com/en-us/library/c37dh6kf(VS.71).aspx阅读和 fputws http://msdn.microsoft.com/en-us/library/t33ya8ky(VS.71)。 71).aspx来写。
示例代码在提供的链接中。
于 2010-10-11T10:54:11.460 回答