免费注册 查看新帖 |

Chinaunix

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

求EBCDIC ASCII 中文对应表??? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-10 23:44 |只看该作者 |倒序浏览
本人想从主机下载AS400文件到PC本,需要进行EBCDIC 与  ASCII之前的转换.
我用了两种方法:
第一:是用IBM TOOL BOX for 里面的JT400  包,但不知是哪里没有设置好,中文老是转不过来.
第二:自己建转码表,在网上查了些资料,现在英文转换已经没有问题,但中文转换好像比较麻烦一点.
EBCDIC的中文好像是以0X0E 开头 并以 0X0F 结尾,我写了程序,单独的中英文转是没有问题了,
但是当我把总个文件下载下来时.文件的开头和结尾都有问题.并且,每行的开始与结尾都出现乱码
请前辈指点!!!!
本来文件应该是这样:
5722WDS V5R4M0  060210               IBM COBOL/400                LIBADC13/ZCMGBLKB     BJCIBDEV  11/06/08 14:51:54     Page    1
Program  . . . . . . . . . . . . . . :   ZCMGBLKB
   Library  . . . . . . . . . . . . . :     LIBADC13
Source file  . . . . . . . . . . . . :   ZL081028
   Library  . . . . . . . . . . . . . :     LIBADC13
Source member  . . . . . . . . . . . :   ZCMGBLKB     11/06/08 14:51:48
Generation severity level  . . . . . :   29
Text 'description' . . . . . . . . . :    自动上标记的套现客户数据下载
Source listing options . . . . . . . :   *SRCDBG
Generation options . . . . . . . . . :   *NONE
Conversion options . . . . . . . . . :   *NONE
Sort sequence  . . . . . . . . . . . :   *HEX

但我转出来变成了这样:
咲芀??芀??芀冘芀竐??芀??芀???? 芀??芀斧芀兇0芀?? ?? ??$芀??
0咲艼a??艸 芁??????芀儾??歧??歧??歧??艶??軉D 5722WDS V5R4M0  060210咹鬒BM COBOL/400咹LIBADC13/ZCMGBLKB咹孊JCIBDEV  11/06/08 14:51:54咹孭age咹????
Program  . . . . . . . . . . . . . . :   ZCMGBLKB??
   Library  . . . . . . . . . . . . . :咹孡IBADC13??
Source file  . . . . . . . . . . . . :   ZL081028??
   Library  . . . . . . . . . . . . . :咹孡IBADC13??
Source member  . . . . . . . . . . . :   ZCMGBLKB咹??/06/08 14:51:48??
Generation severity level  . . . . . :   29??
Text 'description' . . . . . . . . . :   自动上标记的套现客户数据下载  ??
Source listing options . . . . . . . :   *SRCDBG??
Generation options . . . . . . . . . :   *NONE??
Conversion options . . . . . . . . . :   *NONE??
不知是我的转码规则有问题还是我的对应表有问题.请高用指点

论坛徽章:
0
2 [报告]
发表于 2008-11-11 08:42 |只看该作者
jt400 是不是JAVA?

论坛徽章:
0
3 [报告]
发表于 2008-11-11 13:46 |只看该作者

回复 #1 yaliu_hello 的帖子

按F9后翻页翻到最后一页 在最后的条件里看看是多少?

论坛徽章:
0
4 [报告]
发表于 2008-11-11 15:27 |只看该作者
先写好1个字节半角字符的ASCII/EBCDIC转换函数
再写好2个字节全角字符的ASCII/EBCDIC转换函数
再写好1个半角、全角混合字符串的ASCII/EBCDIC转换函数
有了这个基础,就可以进行文件的转换了。
从AS/400下载的文件你想自己转码,必须用BIN方式的FTP下载,SRCPF下载下来是定长记录格式文件,每行没有结束标志,所以你要知道SRCPF在AS/400上的记录长度是多少(DSPFD中 Maximum record length 的值要减去12,即行号6字节、修改日期6字节)。而DOS下文本文件是用0x0d,0x0a即回车和换行作为每行的结束标志的,UNIX下文本文件是用0x0a即换行作为每行的结束标志的,好象VAX/VMS操作系统下文本文件是用0x0d即回车作为每行的结束标志的(我现在手头没有VAX机器,无法验证)。

论坛徽章:
0
5 [报告]
发表于 2008-11-11 15:37 |只看该作者
如果需要转数据文件PF而不是SRCPF,那么需要知道PF的结构,另外最起码还要知道A、O、P、S型字段的转码。

我也是自己写转码程序,在AS/400和UNIX或者DOS/WINDOWS下跑。
汉字支持GBK字符集。

例如我的部分函数原型:
USGC ASCIItoEBCDIC(USGC c);
USGC EBCDICtoASCII(USGC c);
int  isprintEBCDIC(USGC c);
USGS HZ_A2E(USGS GB_Code);
USGS HZ_E2A(USGS EBCDIC_Code);
int  Str_A2E(USGC *src, int src_len, USGC *dest);
int  Str_E2A(USGC *src, int src_len, USGC *dest);

int  CvtFldA2E(USGC *Ebuf, int lenE, char fld_type, int fld_len,
               int fld_dec, USGC *Abuf, int lenA, LDU *val_ptr);
int  CvtFldE2A(USGC *Ebuf, int lenE, char fld_type, int fld_len,
               int fld_dec, USGC *Abuf, int lenA, LDU *val_ptr);
int  CvtFldP2A(USGC *Ebuf, int lenE, int fld_len, int fld_dec,
               USGC *Abuf, int lenA);
int  CvtFldS2A(USGC *Ebuf, int lenE, int fld_len, int fld_dec,
               USGC *Abuf, int lenA);
int  CvtFld_long2P(USGC *Ebuf, int lenE, int fld_len, long n);
int  CvtFld_long2S(USGC *Ebuf, int lenE, int fld_len, long n);
int  CvtFld_double2P(USGC *Ebuf, int lenE, int fld_len, int fld_dec, double n);
int  CvtFld_double2S(USGC *Ebuf, int lenE, int fld_len, int fld_dec, double n);
int  BigDecimalStrA2Ebuf(USGC *Ebuf, int lenE, int fld_len, int fld_dec,
                         USGC *Abuf, int lenA, char fld_type);
int  BigDecimalEbuf2Astr(USGC *Ebuf, int lenE, int fld_len, int fld_dec,
                         USGC *Abuf, int lenA, char fld_type, int mode);
int  BufFldA2E(USGC *FldPtrE, int FldLenE, char FldType,
               int FldLen, int FldDec, USGC *FldPtrA, int FldLenA);
int  BufFldE2A(USGC *FldPtrE, int FldLenE, char FldType,
               int FldLen, int FldDec, USGC *FldPtrA, int FldLenA);
int  BufFldA2Estr(USGC *Ebuf, int LenE, char FldType,
                  int FldLen, int FldDec, USGC *FldPtrA, int FldLenA);
int  BufFldE2Astr(USGC *FldPtrE, int FldLenE, char FldType,
                  int FldLen, int FldDec, USGC *Abuf, int LenA);

论坛徽章:
0
6 [报告]
发表于 2008-11-11 20:51 |只看该作者

回复 #2 digitalchina 的帖子

jt400就是jt400.jar IBM 的开源工具包!

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

回复 #4 ux400 的帖子

非常感您的回复: 有人帮助总是开心的
跟据你的提醒我查看了我的代码发已解决以下问题
1.对制表符做了特殊处理
2.对换行做了特殊处理
现在转码中文已基本没有问题了!但还是有一个小问题
1.EBCDIC 中的 十六进制 00 0D 00 是不是有特殊的意义啊??
2.现在对以下十六进制内容转码还是不正确: 不知前辈是否见过
00 0D 00 00 00 00 0C 00 00 0F 0D 00 0D 34 C4 01 这是EBCDIC十六进制码
本应转过来就只是一个
0C 0D 0A
看上去的较果就是 在DOC格式下就是一条横线

论坛徽章:
0
8 [报告]
发表于 2008-11-13 12:58 |只看该作者
原帖由 yaliu_hello 于 2008-11-12 23:25 发表
非常感您的回复: 有人帮助总是开心的
跟据你的提醒我查看了我的代码发已解决以下问题
1.对制表符做了特殊处理
2.对换行做了特殊处理
现在转码中文已基本没有问题了!但还是有一个小问题
1.EBCDIC 中的 十 ...


AS/400 SRCPF 中的 member 内容就相当于 DOS、WINDOWS 、UNIX 下的文本文件
但是 AS/400 上的文本行末尾没有回车、换行 符号
而DOS、WINDOWS 下的文本行末尾有回车、换行 符号
UNIX 下的文本行末尾有换行 符号

正常的文本行内容中应该只有可见字符、汉字吧?怎么会有 0x00, 0x01 这些东西呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP