免费注册 查看新帖 |

Chinaunix

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

中文乱码程序讨论! (大家快来顶呀!) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-05-24 15:53 |只看该作者 |倒序浏览
大家好:
   我这里有一段公司前辈的代码,用于处理中文乱码。可是,我太愚笨,每次只知道拿来用,看不懂什么意思。现拿来讨论,希望各位能详细注解它:(假设需要检查的中文字段为FIELD  30 )
-----------------------------------------------------------------

  1. C               @CHKNM    BEGSR                                
  2. C*CHECK CHAR FIELD(30  O)                                             
  3. C                     BITOF'0123'    XOF     1                  
  4. C                     BITON'4567'    XOF                        
  5. C                     BITOF'01237   XOE     1                  
  6. C                     BITON'456'     XOE                        
  7. C                     MOVELXOF     XOFF    2                  
  8. C*                                                               
  9. C                     Z-ADD0         INT1    20                  
  10. C                     Z-ADD0         INT2    20                  
  11. C                     Z-ADD0         ZOE     20                  
  12. C                     Z-ADD0         ZOF     20                  
  13. C                     Z-ADD1         I       20                  
  14. C                     Z-ADD1         J       20                  
  15. C                     Z-ADD0         JJ      30                 
  16. C*
  17. C         INT2     DOUGE30                           
  18. C        *IN90    OREQ '0'                          
  19. C          XOE     SCAN FIELD:I   INT1           98  
  20. C          INT1    ADD  1         I                  
  21. C    98             ADD  1         ZOE               
  22. C*                                                      
  23. C          XOF     SCAN FIELD:J   INT2           90  
  24. C          INT2    ADD  1         J                  
  25. C    90             ADD  1         ZOF               
  26. C                     ENDDO                             
  27. C*                                                      
  28. C       ZOE       IFGT ZOF                          
  29. C         30        SUB  INT1    JJ                 
  30. C          JJ        DIV  2          JJ         
  31. C                     MVR           JJ         
  32. C          JJ        IFEQ 0                     
  33. C                     MOVE XOFF      FIELD      
  34. C                     ELSE                       
  35. C                     MOVE XOF        FIELD      
  36. C                     ENDIF                     
  37. C                     ENDIF                     
  38. C*                                               
  39. C                     ENDSR                     
复制代码

-----------------------------------------------------------------
我的问题是:

  1. 1.         BITOF'0123'    XOF     1                  
  2.             BITON'4567'    XOF                        
  3.             BITOF'01237'   XOE     1                  
  4.             BITON'456'     XOE
复制代码

为什么XOF , XOE 不一样?AS400里面表示中文不是用16进制吗?这里应该是oe ,of 呀?这段是什么意思?

2.这段又是什么意思呀?

  1.      ZOE       IFGT ZOF                          
  2.           30        SUB  INT1      JJ                 
  3.            JJ         DIV  2          JJ         
  4.                       MVR           JJ         
  5.           JJ         IFEQ 0                     
  6.                       MOVE XOFF      FIELD      
  7.                       ELSE                       
  8.                       MOVE XOF         FIELD      
  9.                       ENDIF                     
  10.                       ENDIF         
复制代码

3.希望大家讨论,提出更好的办法.

论坛徽章:
0
2 [报告]
发表于 2004-05-24 16:13 |只看该作者

中文乱码程序讨论! (大家快来顶呀!)

拜托楼主在COPY代码的时候能不能在前后分别加上[ C O D E ] 和
[ / C O D E ]?
这样的代码我学习起来很难的。。。调试更没勇气咯

论坛徽章:
0
3 [报告]
发表于 2004-05-24 22:31 |只看该作者

中文乱码程序讨论! (大家快来顶呀!)

能不能贴出整个的程序阿
我想OE、OF分别是双字节字串的开头和结尾的标示。

论坛徽章:
0
4 [报告]
发表于 2004-05-25 09:31 |只看该作者

中文乱码程序讨论! (大家快来顶呀!)

其实用rpgle做的话,找一个中文汉字,获取第一位和最后一位,然后去你的字符串里面寻找,如果成对的出现前导符和后导符,就不会是乱码,如果不配对,你就要根据实际情况去凑成一对,那就会正常显示了。一般如果超过长度,正常做法是那最后一位被替换成后导符。

论坛徽章:
0
5 [报告]
发表于 2004-05-25 17:56 |只看该作者

中文乱码程序讨论! (大家快来顶呀!)

1.         BITOF'0123'    XOF     1                    
            BITON'4567'    XOF                          
            BITOF'01237'   XOE     1                    
            BITON'456'     XOE
XOF就相当于16进制的 X'0F' 8位00001111
下一类同

论坛徽章:
0
6 [报告]
发表于 2004-05-26 08:17 |只看该作者

中文乱码程序讨论! (大家快来顶呀!)

'00001110'  ----- 代表 'oe' ;
'00001111'  ----- 代表 'of'  .
是这样的吗?分别代表'oe' , 'of' 两个前导符和后导符?
那么as400里面存储英文字母是使用十六进制的吗?

论坛徽章:
0
7 [报告]
发表于 2004-05-26 13:02 |只看该作者

中文乱码程序讨论! (大家快来顶呀!)

是的,分别代表'oe' , 'of' 两个前导符和后导符

那么as400里面存储英文字母是使用十六进制的吗?
存储应该是ebcdic码吧,不过可以看到任何字符的十六进制代码
sql利用hex(),还有其它的方法

论坛徽章:
0
8 [报告]
发表于 2004-05-27 08:27 |只看该作者

中文乱码程序讨论! (大家快来顶呀!)

我在终端机上debug过,‘00001110’--‘oe' ;  '00001111'-----'of'

  1. C         INT2      DOUGE30                           
  2. C        *IN90     OREQ '0'                          
  3. C         XOE       SCAN FIELD:I   INT1           98  
  4. C          INT1      ADD  1         I                  
  5. C   98                ADD  1         ZOE               
  6. C*                                                      
  7. C         XOF       SCAN FIELD:J   INT2           90  
  8. C          INT2      ADD  1         J                  
  9. C   90                ADD  1         ZOF               
  10. C                       ENDDO                  
复制代码

这段是在要check的字段中分别查找 'oe','of', INT1,INT2纪录位置,ZOE,
ZOF纪录找到的'oe','of'个数。但是,下面这段为什么要这样处理呢?

  1. C         ZOE       IFGT ZOF                          
  2. C          30        SUB  INT1      JJ                 
  3. C            JJ        DIV  2          JJ         
  4. C                       MVR           JJ         
  5. C            JJ        IFEQ 0                     
  6. C                       MOVE XOFF      FIELD      
  7. C                       ELSE                       
  8. C                       MOVE XOF         FIELD      
  9. C                       ENDIF                     
  10. C                       ENDIF                     
复制代码

还请大家指教。另外,我在PC机器仿真界面上按Ctrl + F1看不到'oe','of'.
请问PC上如何才能看到中文的前导后导符呢?

论坛徽章:
0
9 [报告]
发表于 2004-05-27 10:26 |只看该作者

中文乱码程序讨论! (大家快来顶呀!)

你用的是client access的5250么?
如果是的话,可以在编辑菜单里选优先权----外观-----显示设置----DBCS显示---开启SO-SI显示

论坛徽章:
0
10 [报告]
发表于 2004-05-27 10:55 |只看该作者

中文乱码程序讨论! (大家快来顶呀!)

如果是PCOM话,在PC机器仿真界面上按Ctrl + F1看不到'oe','of'.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP