免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: fxf_china
打印 上一主题 下一主题

在AS400中怎么得到汉字的内码?怎么区分汉字前后的前导符后导符? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2005-07-25 09:22 |只看该作者

在AS400中怎么得到汉字的内码?怎么区分汉字前后的前导符后导符?

前導符
C                     BITOF'01237'   ITOE    1
C                     BITON'456'     ITOE     
後導符
C                     BITOF'0123'    ITOF    1
C                     BITON'4567'    ITOF

论坛徽章:
0
12 [报告]
发表于 2005-07-25 11:11 |只看该作者

在AS400中怎么得到汉字的内码?怎么区分汉字前后的前导符后导符?

上面的其实就是eval itoe=x'0e'  itof=x'0f'

昨天说的16进制的方法有点麻烦 用rpg写很费尽啊
字符转换成16进制还可以 反过来就有点烦了
用rexx吧 很容易

  1. parse arg  a                     
  2. options  exmode                  
  3. a=strip(a)                        
  4. b=1                              
  5. do  forever                       
  6. if  b >; length(a) then leave      
  7. c = substr(a,b,1)                 
  8. b = b + 1                        
  9. say c                             
  10. end                              
复制代码

论坛徽章:
0
13 [报告]
发表于 2005-07-25 12:36 |只看该作者

在AS400中怎么得到汉字的内码?怎么区分汉字前后的前导符后导符?

前導符
C                     MOVE X'0E'    ITOE    1
後導符
C                     MOVE X'0F'    ITOF    1

论坛徽章:
0
14 [报告]
发表于 2005-07-25 12:43 |只看该作者

在AS400中怎么得到汉字的内码?怎么区分汉字前后的前导符后导符?

请教楼上,把16进制转换成字符有什么方法吗 例如一个字符串
'F1F2F3'  应该等于'123'  怎么转换呢

论坛徽章:
0
15 [报告]
发表于 2005-07-25 12:52 |只看该作者

在AS400中怎么得到汉字的内码?怎么区分汉字前后的前导符后导符?

我没有试过,不过用对照表应该是可以实现的。除双字节的字符
是有限的,把他们放到数组中,对应转换。
F1   1
F2   2
F3   3
.......

论坛徽章:
0
16 [报告]
发表于 2005-07-25 12:57 |只看该作者

在AS400中怎么得到汉字的内码?怎么区分汉字前后的前导符后导符?

这样比较麻烦 而且还有双字节的问题 不知道eb码的双字节有法判断吗
如ascii码里面 第一个字节大于128之类的

论坛徽章:
0
17 [报告]
发表于 2005-07-25 17:43 |只看该作者

在AS400中怎么得到汉字的内码?怎么区分汉字前后的前导符后导符?

TO fairyboy
昨天说写个看看,今天下午试着写了个,不过还是没利用16进制,转换比较烦
昨天没加考虑就说出去了 惭愧
  1.      H*  Programe No. :
  2.      H*          Text :
  3.      H*      Function : recombine  the string
  4.      H*
  5.      H*     Programer :
  6.      H*
  7.      H*  Date Created :
  8.      H*
  9.      H**********************************************************************
  10.      H DATFMT(*ISO)  COPYRIGHT('(C) Copyright lardbucket.Dalian 2005')
  11.      H DATEDIT(*YMD)
  12.      H Nomain
  13.      H*********************************************************************
  14.      Ffile      o    e             disk      usropn
  15.      D Recombine       PR            10I 0   opdesc
  16.      D   source1                   1024      Const OPTIONS(*VARSIZE)
  17.      D   Lengths                     10I 0   Const Options(*nopass)
  18.      D
  19.      D Delstr          PR
  20.      D   source2                   1024      OPTIONS(*VARSIZE)
  21.      D   len                         10I 0
  22.      D   dellen                      10I 0
  23.      D
  24.      D getOpD          PR                  ExtProc('CEEDOD') OPDESC
  25.      D ParmNum                       10I 0 CONST
  26.      D                               10I 0
  27.      D                               10I 0
  28.      D                               10I 0
  29.      D                               10I 0
  30.      D                               10I 0
  31.      D                               12A   OPTIONS(*OMIT)
  32.      P Recombine       B                     export
  33.      D Recombine       PI            10I 0   opdesc
  34.      D   source1                   1024      Const OPTIONS(*VARSIZE)
  35.      D   Lengths                     10I 0   Const Options(*nopass)

  36.       * Parameters passed to CEEDOD
  37.      D DescType        S             10I 0
  38.      D DataType        S             10I 0
  39.      D DescInfo1       S             10I 0
  40.      D DescInfo2       S             10I 0
  41.      D InLen           S             10I 0
  42.      D
  43.      D
  44.      D HexLen          S             10I 0
  45.      D Couple          C                   Const('0e and 0f are not in pairs')
  46.      DSingle           S              1
  47.      DDsChinese        Ds
  48.      Dd0                              1    Inz(X'0e')
  49.      Dd1                              2
  50.      Dd2                              1    Inz(x'0f')
  51.      Dpos0e            s             10I 0
  52.      Dpos0f            s             10I 0
  53.      Dtmpv             s             10I 0
  54.      DNoDbcs           s              1    Inz('0')
  55.      Dreal             s             10I 0
  56.      DLength           s             10I 0
  57.      Dsource           s           2048A
  58.      D
  59.      D*--------------------------------------------------------------
  60.       ***the length must be smaller than 2048
  61.       
  62.      C
  63.      C                   Movel     source1       source
  64.      C                   If        %Parms = 1
  65.      C                   CALLP     GetOpd(1         : DescType : DataType :
  66.      C                                    DescInfo1 : DescInfo2: Inlen    :
  67.      C                                    *OMIT)
  68.      C                   Z-add     InLen         HexLen
  69.      C                   Else
  70.      C                   Z-Add     Lengths       HexLen
  71.      C                   EndIf
  72.      C
  73.      C                   if        not%open(file)
  74.      C                   open      file
  75.      C                   endif
  76.      C
  77.      C                   Dou       HexLen = 0
  78.      C                   eval      pos0e = 0
  79.      C     x'0e'         Scan      source        pos0e                    10
  80.      C                   If        Not%found
  81.      C                   Eval      Pos0e = HexLen
  82.      C                   Eval      HexLen = 0
  83.      C                   Eval      NoDbcs = '1'
  84.      C                   EndIf
  85.      C                   If        pos0e >; 1
  86.      c                   If        NoDbcs = '0'
  87.      C                   Eval      tmpv  = pos0e - 1
  88.      C                   endIf
  89.      C                   Do        tmpv          real
  90.      C                   Eval      single = %subst(source:real:1)
  91.      C                   Eval      record = single
  92.      C                   Write     filer
  93.      C                   Enddo
  94.      C                   EndIf
  95.      C                   If        NoDbcs = '0'
  96.      C     x'0f'         Scan      source        pos0f                    10
  97.      C                   if        not%found
  98.      C     Couple        dsply
  99.      C                   return    0
  100.      C                   endIf
  101.      C                   Eval      length = pos0f - pos0e -1
  102.      C                   Eval      length = length / 2
  103.      C                   Do        length
  104.      C                   Eval      d1 = %subst(source:pos0e+1:2)
  105.      C                   Eval      record = DsChinese
  106.      C                   Eval      pos0e = pos0e + 2
  107.      C                   Write     filer
  108.      C                   Enddo
  109.      C                   Callp     delstr(source:HexLen:pos0f)
  110.      C                   Eval      HexLen = HexLen - pos0f
  111.      C                   EndIf
  112.      C                   EndDo
  113.      C                   if        %open(file)
  114.      c                   close     file
  115.      C                   endIf
  116.      C                   Return    1
  117.      P                 E
  118.       *delstr
  119.       *
  120.      Pdelstr           B
  121.      DDelstr           PI
  122.      D str                         1024    options(*varsize)
  123.      D len                           10I 0
  124.      D delLen                        10I 0
  125.      C                   Eval      str = %subst(str:dellen+1:len-dellen)
  126.      C                   return
  127.      P                 E

复制代码


file     

r     filer
      record     4o

论坛徽章:
0
18 [报告]
发表于 2005-07-25 21:56 |只看该作者

在AS400中怎么得到汉字的内码?怎么区分汉字前后的前导符后导符?

原帖由 "Eagle_wolf" 发表:

file     

r     filer
      record     4o

CALLP看得头晕.

论坛徽章:
0
19 [报告]
发表于 2005-07-26 07:48 |只看该作者

在AS400中怎么得到汉字的内码?怎么区分汉字前后的前导符后导符?

据说可以用unicode,这样就没有前/后导符,不过只有sap有用,还有对机器要求版本比较高,最好i5.不过不知道rpg怎么处理就是了。

论坛徽章:
0
20 [报告]
发表于 2005-07-26 13:14 |只看该作者

在AS400中怎么得到汉字的内码?怎么区分汉字前后的前导符后导符?

我试了一下,如果把字符字段定义为UCS-2(unicode)字符集的话,在这个字段里就没有前导符和结束符了,但是输入英文字母就有问题了.

定义的物理表如下:
A* CUSTMONER INFORMATION TABLE
A     R   RCUST
A          CUSTID       12G     CCSID(1348

因为最近考虑在400上实现直接生成PDF文件的一个库,其中涉及到转码的问题,单字节转码很简单,多字节比较麻烦,虽然也有一个办法,但是自我感觉不太好
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP