ITEM: F8831L
Problems converting from ASCII to EBCDIC with dd
Question:
We are using the AIX to AS/400 Connection Program Version 2 to
communicate between our RISC System/6000 and AS/400 boxes. We have some
reports that we are transfering to the AS/400, which must be converted
from ASCII to EBCDIC. We have tried using
dd if=text.ascii of=text.ebcdic conv=ebcdic
and
dd if=text.ascii of=text.ebcdic conv=ibm
The conv=ibm is because in the man pages, we read that ibm is an IBM form
of the ebcdic type. This converts most of the text, but we are having
problems with the '|', '[', and ']' symbols. They do not get converted.
They don't always seem to convert to the same thing either. Is there
something we can do to get around this problem?
Response:
You may want to investigate if the conversion function of the AS/400
Connection Program converts your ASCII programs properly. Please
reference your AS/400 Connection Program documentation for further
details on converting ASCII to EBCDIC during file transfer.
dd makes the following conversions:
ASCII character conv=ibm (in hex) conb=ebcdic (in hex)
[ 0xad 0x4a
] 0xbd 0x4f
| 0x4f 0x6a
Unfortunately, the ibm and ebcdic conversion tables are hardcoded in
dd and cannot be customized by the user...
Here is a script that uses the dd ebcdic conversion table to convert an
ASCII file to EBCDIC. sed is used as a filter prior to calling dd in
order to convert the square brackets to the ASCII characters that will
convert properly to square brackets. There is not an appropriate ASCII
character that will convert to a split vertical bar with the dd ibm
conversion table. Thus, the script uses the ebcdic conversion table,
which already converts the pipe symbol correctly. I called the script
convibm:
\#!/bin/ksh
sed "s/\\[/`echo \\"\\\\0342\\"`/g
s/\\]/`echo \\"\\\\0343\\"`/g" $1 | dd conv=ebcdic of=$1.ebcdic
Then add execute permission for owner: chmod u+x convibm
To run: convibm INFILE
The script places the output in a file called INFILE.ebcdic where INFILE
is the name of the input file.
For example, a file called ascii contains the following:
0123456789abcdefghijklmnopqrstuvwxyz
~!@\#$%\^&*()_+-=[][]\\{}||;':",./\<>?
If you run it through convibm with the following command: "convibm ascii"
an output file called ascii.ebcdic is created. "od -x ascii.ebcdic"
shows the following:
0000000 f0f1 f2f3 f4f5 f6f7 f8f9 8182 8384 8586
0000020 8788 8991 9293 9495 9697 9899 a2a3 a4a5
0000040 a6a7 a8a9 25a1 5a7c 7b5b 6c5f 505c 4d5d
0000060 6d4e 607e babb babb e0c0 d06a 6a5e 7d7a
0000100 7f6b 4b61 4c6e 6f25
0000110
\^\^ \^\^ \^ \^
|| || | |
Notice that the square brackets have been correctly converted to 0xba and
0xbb and the pipe symbols have been converted to 0x6a (split vertical bar
in EBCDIC).
Support Line: Problems converting from ASCII to EBCDIC with dd ITEM: F8831L
Dated: January 1994 Category: N/A
This HTML file was generated 99/06/24~13:30:51
Comments or suggestions?
Contact us