Chinaunix

标题: 請問如何知道某個漢字在AS400裡的內碼? [打印本页]

作者: forgot2000    时间: 2008-05-07 09:28
标题: 請問如何知道某個漢字在AS400裡的內碼?
比如“找不到”這三個漢字,在AS400裡是如何存放的?請問有什麼快捷的辦法知道其內碼呢?是按照16進制的EBCDIC碼加上前導0E,和後導0F組成嗎?實際是怎麼存放的?

[ 本帖最后由 forgot2000 于 2008-5-10 08:32 编辑 ]
作者: qingzhou    时间: 2008-05-07 09:52
“找不到”是3个汉字,在400存放结构:(OE)XXXXXX (OF),共占用8个字节,我们在DDS定义O型字段存放中文记录。

其中一个汉字占用2个字节,加上前导符OE和后导符OF各占一个字节。

内码我也不是很清楚,查查DDS参考手册看看是否有相关内容。
作者: forgot2000    时间: 2008-05-07 14:00
但如何查到某個漢字的內碼呢?有什麼好辦法嗎?
作者: i.am.junlei.li    时间: 2008-05-07 15:20
标题: 回复 #3 forgot2000 的帖子
办法有很多呢;如果您最熟悉RPGLE,不妨这样:
1) 写个2行的RPGLE程序,如下:
d mm              s              8a   inz('你好')                  
c                   seton                                          lr
2) 使用标准调试器(STRDBG),BREAK 2
3) CALL 小程序, 使用EVAL调试命令 EVAL MM:X,您会看到类似下面的输出:
00000     0E52E24D C20F4040 ........ ........   - .

于是可以知道'你好'实际上是x'0E52E24DC20F'
* 另外,关于DBCS字符delimiter的事(即0x0E, 0x0F),就如qingzhou前辈所说。
* 更多呢,如果您想用RPG或其他HLL写成工具,也挺容易的;看您自己的需要了。
作者: MUSIC168    时间: 2008-05-09 14:52
或者写在一个数据库中,然后DSPPFM,选择F10(显示16进制)
作者: forgot2000    时间: 2008-05-10 08:31
沒有更好更快的辦法嗎?還要寫程序,不嫌太麻煩了嗎?
作者: MUSIC168    时间: 2008-05-12 09:46
不用写程序,你随便建一个pf(一个字段,需要多长自己看着办),用UPDDTA录入你想知道内码的中文,存盘退出,再DSPPFM,按F10进入十六进制模式即可
作者: forgot2000    时间: 2008-05-12 10:25
我自己試出了最簡單的辦法了,不過要求AS400能支持SQL,用Strsql指令進入Enter SQL Statements,敲入select hex(' 找不到 ') from sysibm/sysdummy1 即可,謝謝大家,也把此經驗分享。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2