- ベストアンサー
SJIS→JIS漢字コード変換の制御コマンドの扱い
JIS→SJISへの変換の際に、制御コマンドとして <ESC>$Bや<ESC>(Bが入っている事で漢字かそうでないかの 判断ができますが、 逆にSJIS→JISへの変換の際に、制御コマンドはどのようにして 埋め込む事が出来るのでしょうか? fprintf(fp,"?",0x1b,0x24,0x42); ?にはどういれたらよいのでしょう? %cだと表示されてしまいますし・・
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
#include <stdio.h> int main(void) { FILE* fp; fp = fopen("jis.txt", "w"); fprintf(fp, "\x1b$B4A;z\x1b(B"); // 4A;zは"漢字"のJISコード fclose(fp); return 0; } これで問題なく書き込めました。
その他の回答 (4)
- chie65536
- ベストアンサー率41% (2512/6032)
>秀丸エディタで見る、ということです。 秀丸エディタのVer.2.17以降では、標準では「EUCコードとJISコードの自動認識をする」はオフになっています。 なので「正しいJISコードで書かれたファイル」も、秀丸エディタで開くと [esc]$B4A;z[esc](B に見えます。 もし「その他→動作環境→編集」の「EUCコードとJISコードの自動認識をする」がオフになっているならオンにしましょう。 また、これがオンになっているにも関わらず秀丸エディタで [esc]$B4A;z[esc](B のように見えるとしたら「どこかに、JISコードと判定することが出来ない、コードが間違っている文字」が含まれている可能性があります。
お礼
私の勘違いでした。 前者でした・・・・・
補足
後者です。 コードが間違っている文字、というのもありえないと思います。 それは、以下の例では 漢 と、出るはずが、[esc]$B4A[esc](B と表示されるからです。
- sakusaker7
- ベストアンサー率62% (800/1280)
>書き込み後にファイルをwindows上などで普通に開いた時に、 「普通に開く」とはどういうことですか? エディタで見るということは違うでしょうか。 (いわゆる)JIS形式のエンコーディングに対応しているものであれば 制御コードが見えるとか言うことはないと思いますが、どういった状況を言われているのでしょうか。 >教えていただいた内容ですと、制御コマンドも表示されてしまいます。 どこに対してどのようにして「表示」しているのですか?
補足
秀丸エディタで見る、ということです。 #3さんのコードでは確かに正確に書き込みされており、 制御コマンドも表示されていませんでした。 しかし、その補足に書かせていただいた内容コードですと 制御コマンドも表示されてしまいました。
- mtaka2
- ベストアンサー率73% (867/1179)
fprintf(fp, "\x1b$B"); で出来ますが、わざわざfpritnfとか使わなくても、 fputs("\x1b$B", fp); とか fputs("\x1b(B", fp); で十分でしょう。
補足
説明不十分でしたようで、 書き込み後にファイルをwindows上などで普通に開いた時に、 <ESC>$B「漢字」<ESC>(B ではなく、 「漢字」だけを表示させるようにしたいのです。 教えていただいた内容ですと、制御コマンドも表示されてしまいます。 実際にJISコードのファイルを見てみますと制御コマンド無しの 漢字が見えておりますが、fgets等で読みだしてみると、 漢字の前後に制御コマンドが埋め込まれていることがわかります。 この状態を作りたいと思っていますが、ただfprintfなどで書き込む だけでは駄目なようで・・ この辺りおわかりでしょうか?
- Oh-Orange
- ベストアンサー率63% (854/1345)
★アドバイス 単純にfputc関数を使うなど。 fputc( 0x1B, fp ); fputc( 0x24, fp ); fputc( 0x42, fp ); ・バイナリ出力でオープンしていれば fprintf( fp, "%c%c%c", 0x1b, 0x24, 0x42 ); でも出来ると思います。
お礼
確かにできますね・・・・ 私は今こんな感じです。 moji[i]・・・・・・・・・4A moji[i+1]・・・・・・・・;z @@コード@@ fprintf(fp, "\x1b$B"); fprintf(fp,"%c%c",moji[i],moji[i+1]); fprintf(fp, "\x1b(B"); @@表記@@秀丸エディタでopen [esc]$B4A;z[esc](B
補足
moji[i]・・・・・・・・・4A moji[i+1]・・・・・・・・;z ↑まちがいでした moji[i]・・・・・・・・・4 moji[i+1]・・・・・・・・A です。