- 论坛徽章:
- 0
|
我在linux下
写了一程序把UTF-8转成GB2312
报段错误。但是我用命令iconv转换却是成功的。郁闷。。。
大家看看吧。
代码:
- #include <stdio.h>
- #include <iconv.h>
- int
- main(int argc, char **argv) {
- char *infile_name, *outfile_name;
- FILE *infile, *outfile;
- char in_buffer[1024];
- char out_buffer[1024];
- int o_len;
- int i_len;
- iconv_t conv;
- if (argc <= 2) {
- printf("Usage: %s inputfile outfile\n", argv[0]);
- return(0);
- }
- infile_name = argv[1];
- outfile_name = argv[2];
- conv = iconv_open("GB2312", "UTF-8");
- if(conv == (iconv_t)-1)
- {
- perror("iconv_open");
- exit(1);
- }
- infile = fopen(infile_name, "r");
- if(infile == NULL)
- {
- perror("fopen");
- exit(1);
- }
-
- outfile = fopen(outfile_name, "w");
- if(outfile == NULL)
- {
- perror("fopen");
- exit(1);
- }
- while(fgets(in_buffer, 1024, infile) != NULL)
- {
- i_len = strlen(in_buffer);
- o_len = sizeof(out_buffer);
- printf("in_buffer=[%s]\n", in_buffer);
- if(iconv(conv, (char **)&in_buffer, &i_len, (char **)&out_buffer, &o_len ) == -1)
- {
- perror("iconv");
- break;
- }
- fputs(out_buffer, outfile);
- }
- fclose(infile);
- fclose(outfile);
-
- if(iconv_close(conv) == -1)
- {
- perror("iconv_close");
- exit(1);
- }
- return (1);
- }
复制代码
[ 本帖最后由 MackedNice 于 2006-11-30 19:23 编辑 ] |
|