免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1714 | 回复: 2
打印 上一主题 下一主题

ec注释含半个汉字的编译问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-08-07 15:07 |只看该作者 |倒序浏览
  在64位核心中,如果在注释信息中半个汉字(含全角标点),则在用esql编译时会出现“Error -33076: Input stream contains an illegal multi-byte character.”这样的错,但是在32位核心中是不会出错的,不知道esql有没有什么参数可以忽略这样的错误
    现因系统升级需要转换大批此类文件,急需高手指点。

论坛徽章:
0
2 [报告]
发表于 2005-08-07 16:29 |只看该作者

ec注释含半个汉字的编译问题

目前的处理方法是用一个程序删除程序中的半个汉字:
    前提————认为汉字是由两个字节区码和位码组成的,并认为区码和位码都大于128(或者160更确切?但有例外如“镕”的区码为233位码却为70);
    处理————统计每一段连续的汉字代码(区码和位码)的个数,如果结果为奇数就把最后一个字节删除。
        隐患————会误删除如“镕”之类的字串,担心还有会其他未意识到的问题

程序代码如下,请各位大侠帮看看有没有什么问题:

  1. #include <stdio.h>;
  2. #include <stdlib.h>;

  3. main(int argc, char *argv[])
  4. {
  5.         FILE        *fp_in, *fp_out;
  6.         char        fname_in[256], fname_out[256];
  7.         char        str[1024+1];
  8.         char        chi[1024+1];
  9.         char        *p;
  10.         int         i, j, begin_flag, modify_flag;
  11.         char        cmd_str[1024+1];

  12.         if( 2 != argc)
  13.         {
  14.                 printf("\n\tUsage: %s <filename>;\n\n", argv[0]);
  15.                 exit(1);
  16.         }

  17.         modify_flag=0;
  18.         memset(fname_in, 0, sizeof(fname_in));
  19.         memset(fname_out, 0, sizeof(fname_out));
  20.         memset(str, 0, sizeof(str));
  21.         memset(chi, 0, sizeof(chi));
  22.         memset(cmd_str, 0, sizeof(cmd_str));
  23.        
  24.         strcpy(fname_in, argv[1]);
  25.         sprintf(fname_out, "%s.kill_half", argv[1]);
  26.        
  27.         printf("in_file: %s\nout_file: %s\n", fname_in, fname_out);
  28.        
  29.         if((fp_in=fopen(fname_in, "r"))==NULL){
  30.                 printf("fopen %s err!\n", fname_in);
  31.                 exit(1);
  32.         }

  33.         if((fp_out=fopen(fname_out, "w"))==NULL){
  34.                 printf("fopen %s err!\n", fname_out);
  35.                 exit(1);
  36.         }

  37.         while(fgets(str, 1024, fp_in)!=NULL)
  38.         {
  39.                 p=chi;
  40.                 for(i=0, j=0, begin_flag=0; i<strlen(str); i++)
  41.                 {
  42.                         if(str[i]>;128)
  43.                         {
  44.                                 begin_flag=1;
  45.                                 j++;
  46.                                 *p++=str[i];
  47.                         }
  48.                         else
  49.                         {
  50.                                 if(1==begin_flag && 0!=j%2)
  51.                                 {
  52.                                         p--;
  53.                                         *p=str[i];
  54.                                         p++;
  55.                                         modify_flag=1;
  56.                                 }
  57.                                 else *p++=str[i];
  58.                                 j=0;
  59.                                 begin_flag=0;
  60.                         }
  61.                 }
  62.                 *p='\0';
  63.                 fputs(chi, fp_out);
  64.         }

  65.         fclose(fp_in);
  66.         fclose(fp_out);

  67.         if(1==modify_flag)
  68.         {
  69.                 sprintf(cmd_str, "cp %s %s.half_bak; mv %s.kill_half %s",
  70.                                 argv[1], argv[1], argv[1], argv[1]);
  71.                 printf("cmd_str1: %s\n\n", cmd_str);
  72.                 system(cmd_str);
  73.         }
  74.         else
  75.         {
  76.                 sprintf(cmd_str, "rm -f %s.kill_half", argv[1]);
  77.                 printf("cmd_str2: %s\n\n", cmd_str);
  78.                 system(cmd_str);
  79.         }
  80. }
复制代码

论坛徽章:
0
3 [报告]
发表于 2005-08-10 11:35 |只看该作者

ec注释含半个汉字的编译问题

我在将sco的ec程序移植到linux上时,也遇到了同样的情况,我是这样处理的:
1 检查源程序的字符集, 可以用file 命令查看.
2 将UTF-8的字符文件,用iconv转换成GB18030.
3 在linux终端屏幕下,将终端字符编码也改为GB18030,便于显示.
编译可以通过


若在linux环境下直接写代码中文注释的话,建议修改/etc/sysconfig/i18n的配置.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP