• ベストアンサー

SJIS→JIS漢字コード変換の制御コマンドの扱い

JIS→SJISへの変換の際に、制御コマンドとして <ESC>$Bや<ESC>(Bが入っている事で漢字かそうでないかの 判断ができますが、 逆にSJIS→JISへの変換の際に、制御コマンドはどのようにして 埋め込む事が出来るのでしょうか? fprintf(fp,"?",0x1b,0x24,0x42); ?にはどういれたらよいのでしょう? %cだと表示されてしまいますし・・

質問者が選んだベストアンサー

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

#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; } これで問題なく書き込めました。

hardtechno
質問者

お礼

確かにできますね・・・・ 私は今こんな感じです。 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

hardtechno
質問者

補足

moji[i]・・・・・・・・・4A moji[i+1]・・・・・・・・;z ↑まちがいでした moji[i]・・・・・・・・・4 moji[i+1]・・・・・・・・A です。

その他の回答 (4)

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.5

>秀丸エディタで見る、ということです。 秀丸エディタのVer.2.17以降では、標準では「EUCコードとJISコードの自動認識をする」はオフになっています。 なので「正しいJISコードで書かれたファイル」も、秀丸エディタで開くと [esc]$B4A;z[esc](B に見えます。 もし「その他→動作環境→編集」の「EUCコードとJISコードの自動認識をする」がオフになっているならオンにしましょう。 また、これがオンになっているにも関わらず秀丸エディタで [esc]$B4A;z[esc](B のように見えるとしたら「どこかに、JISコードと判定することが出来ない、コードが間違っている文字」が含まれている可能性があります。

hardtechno
質問者

お礼

私の勘違いでした。 前者でした・・・・・

hardtechno
質問者

補足

後者です。 コードが間違っている文字、というのもありえないと思います。 それは、以下の例では 漢 と、出るはずが、[esc]$B4A[esc](B と表示されるからです。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.4

>書き込み後にファイルをwindows上などで普通に開いた時に、 「普通に開く」とはどういうことですか? エディタで見るということは違うでしょうか。 (いわゆる)JIS形式のエンコーディングに対応しているものであれば 制御コードが見えるとか言うことはないと思いますが、どういった状況を言われているのでしょうか。 >教えていただいた内容ですと、制御コマンドも表示されてしまいます。 どこに対してどのようにして「表示」しているのですか?

hardtechno
質問者

補足

秀丸エディタで見る、ということです。 #3さんのコードでは確かに正確に書き込みされており、 制御コマンドも表示されていませんでした。 しかし、その補足に書かせていただいた内容コードですと 制御コマンドも表示されてしまいました。

  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.2

fprintf(fp, "\x1b$B"); で出来ますが、わざわざfpritnfとか使わなくても、 fputs("\x1b$B", fp); とか fputs("\x1b(B", fp); で十分でしょう。

hardtechno
質問者

補足

説明不十分でしたようで、 書き込み後にファイルをwindows上などで普通に開いた時に、 <ESC>$B「漢字」<ESC>(B ではなく、 「漢字」だけを表示させるようにしたいのです。 教えていただいた内容ですと、制御コマンドも表示されてしまいます。 実際にJISコードのファイルを見てみますと制御コマンド無しの 漢字が見えておりますが、fgets等で読みだしてみると、 漢字の前後に制御コマンドが埋め込まれていることがわかります。 この状態を作りたいと思っていますが、ただfprintfなどで書き込む だけでは駄目なようで・・ この辺りおわかりでしょうか?

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.1

★アドバイス  単純にfputc関数を使うなど。  fputc( 0x1B, fp );  fputc( 0x24, fp );  fputc( 0x42, fp ); ・バイナリ出力でオープンしていれば  fprintf( fp, "%c%c%c", 0x1b, 0x24, 0x42 );  でも出来ると思います。

関連するQ&A