プロが教えるわが家の防犯対策術!

汎用機のCOBOLを使用しています。今回、ソース上でUNICODEのカンマを設定する必要がでてきたのですが、どのように設定していいかわかりません。。。

処理をしたデータをバイナリで(文字コードを変換しないで)転送する必要があり、かつデータの受け取り側がカンマをUNICODEでと指定してきているため、(COBOL上でカンマを打っても、汎用機の英数字コード(EBCDIK)になってしまいますので)どうしてもCOBOL上でUNICODEのカンマをしなければなりません。
UNICODEでのカンマはコードが「U+002C」ということなのですが、どのように設定すればUNICODEでカンマと認識されるのでしょうか?
とりあえず、下記のような項目をつくってデータをつくってみたのですが・・・

01 X-COMMA PIC X(02) VALUE X'002C'

データの受け取り側がこのコードをカンマと判断してくれませんでした・・・
コードはU+002Cとなっているのでそのとおりに設定したかったのですが、「+」が設定できないため、上記のような書き方としました。

何かぜんぜん別の書き方をするのでしょうか?

質問の内容がわかりづらく申し訳ありませんが、どなたか知恵を貸していただければと思います。
よろしくお願いします。

A 回答 (3件)

X'002C'でもX'2C00'でもダメなら以下の方法もお試しください。


COBOLにも方言があるのですが、一応COBOL85の標準とします。
01 X-COMMA.
  03 FILLER X(1) VALUE LOW-VALUE.
  03 FILLER S9(1) USAGE PACKED-DECIMAL VALUE 2.
確か正のゾーンは0x0Cだったので、数値の2と合わせて0x2Cになるはず。
    • good
    • 0

> 01 X-COMMA PIC X(02) VALUE X'002C'



COBOLの文法を良く覚えてないので確認しますが、これはバイト列として
'00', '2C'
の順で並ぶのですか。
そうでなく2バイトの数値なのだとしたら処理系がリトルエンディアンなら
'2C', '00'
の順になるので修正してください。

何にせよ実際に出て行くデータをバイト列としてみて意図通りかどうか確認されることをお勧めします。

> 仕様書を読むと「002C」となっているので、UTF-16BEだと思われます。

これも「002C」のバイト列としての仕様を確認するべきです。仕様書がバイト列として意識して書かれていなければUTF-16LEの可能性を排除できません。
    • good
    • 0

データ表現としてはそれで合ってます。


カンマだけを送っている訳じゃないと思いますが、他のデータはちゃんとユニコードで送れているんでしょうか?

単にユニコードと言った場合、UTF-16を指しますが、上位バイトを先に送るか後に送るかの2種類(UTF-16BEとUTF-16LE)があり、LEだとX'2C00'です。
また、ユニコードといいつつUTF-8かもしれず、その場合は1バイトのX'2C'です。

つまり「ユニコード」というだけではコードが定まりません。
    • good
    • 0
この回答へのお礼

迅速なご回答ありがとうございます!

仕様書を読むと「002C」となっているので、UTF-16BEだと思われます。

あと、送るデータなのですが、文字コードが混在した形になっています。具体的にいいますと、

キーコード(半角数字・EBCDIK)カンマ(UTF-16BE)氏名(日本語項目・KEIS)

こんな感じです。文字コードは受け取り側のプログラムでそれぞれの項目で設定できるため、問題ないと思っています。

このデータ受け取り側のエラーとしては、「氏名の項目が見つかりません」とでるので、キーコードは読めていますがカンマのコードをカンマとして認識していないのでは?と思われるのですが・・・

ご検討よろしくお願いします。

お礼日時:2008/06/18 09:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!