Recent Entries
Archives
Search


Links
Powered by
Movable Type 2.64

2008年09月28日

OpenCOBOLと日本語文字コード

OpenCOBOLと日本語文字コードについて(´ー`)あまり資料がないようなので調べてみたり

そもそも1000speakers:6にて「日本語対応はどうなってますか?」と質問が来たのに「見たこと無いから分からないですね」とか解答してしまってたので、少しはマジメに調べてみないと…というわけです。一般的に日本語と処理系の間で「\」の扱いが問題になることが多いわけですが…


000010 IDENTIFICATION DIVISION.
000020 PROGRAM-ID. 日常会話表現.
000030 DATA DIVISION.
000040 WORKING-STORAGE SECTION.
000050 01 日常会話表現.
000060 03 FILLER PIC N(08) VALUES 'こんにちは 日本'.
000070 PROCEDURE DIVISION.
000080 DISPLAY 日常会話表現.
000090 STOP RUN.

とかソースがShiftJISで書かれていたとして。「表」部分は0x955Cで2byte目に0x5C「\」を含んでいます。コンパイルを試してみると:

[]$ cobc -x HELLOJ.cob
HELLOJ.cob:2: Error: syntax error, unexpected "end of file", expecting "Literal" or "Identifier"

怒られちゃいました(;´Д`)。PROGRAM-IDをHELLOJに変更しても

[]$ cobc -x HELLOJ.cob
HELLOJ.cob:5: Error: syntax error, unexpected "end of file", expecting "Literal" or "Identifier"

と今度はSTORAGE SECTIONに書いた日本語変数名で蹴られてます。これは「表」という文字を取り除いても変わりません。それではリテラルはどうかと言いますと:

000010 IDENTIFICATION DIVISION.
000020 PROGRAM-ID. HELLOJ.
000030 DATA DIVISION.
000040 WORKING-STORAGE SECTION.
000050 01 HELLOJ.
000060 03 FILLER PIC N(08) VALUES 'こんにちは 日本'.
000070 PROCEDURE DIVISION.
000080 DISPLAY HELLOJ.
000090 STOP RUN.

こう書いてみました。

[]$ cobc -x HELLOJ.cob
[]$ ./HELLOJ
{
[]$ ./HELLOJ | nkf -Sx
こんにちは 日本
[]$

大丈夫ですねヽ(´ー`)ノ特に自動では文字コード変換してくれませんので、出力がShiftJISで行われることを仮定してnkfを通してみればしっかりと狙ったとおりの出力が得られます。
cobc -C として中間で吐かれるCのソースを見てみれば分かりますが、

memcpy (b_5, "\202\261\202\361\202\311\202\277\202\315\040\223\372\226\173\040", 16);

と8進数に変換して取り扱ってくれていますのでリテラル中にバックスラッシュがあっても問題ないわけです。項目名やプログラムIDについては処理系にちょっとだけパッチを当てれば対応出来るものと思われます。ただし、現状では項目名やプログラムIDに単体で「\」が含まれていてもエラーになりますので、何らかのオプションがある場合にはチェックを緩くしてくれるようにしないと難しそうです。とりあえずL10Nヽ(´ー`)ノそしてI18N。

Posted by minemaz at 2008年09月28日 14:45
トラックバック
このエントリーのトラックバックURL:
http://www.lancard.com/mt/mt-tb.cgi/453

Ephedra. from Ephedra attorneys california.
Hartford ephedra attorneys. [続きを読む]

トラックバック時刻: 2009年04月11日 12:41

Comments
Post a comment









Remember personal info?