アプリ版:「スタンプのみでお礼する」機能のリリースについて

JIS→SJISへの変換の際に、制御コマンドとして
<ESC>$Bや<ESC>(Bが入っている事で漢字かそうでないかの
判断ができますが、
逆にSJIS→JISへの変換の際に、制御コマンドはどのようにして
埋め込む事が出来るのでしょうか?


fprintf(fp,"?",0x1b,0x24,0x42);
?にはどういれたらよいのでしょう?
%cだと表示されてしまいますし・・

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

この回答への補足

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

moji[i]・・・・・・・・・4
moji[i+1]・・・・・・・・A
です。

補足日時:2008/12/03 09:55
    • good
    • 0
この回答へのお礼

確かにできますね・・・・

私は今こんな感じです。

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

お礼日時:2008/12/03 09:53

>秀丸エディタで見る、ということです。



秀丸エディタのVer.2.17以降では、標準では「EUCコードとJISコードの自動認識をする」はオフになっています。

なので「正しいJISコードで書かれたファイル」も、秀丸エディタで開くと
[esc]$B4A;z[esc](B
に見えます。

もし「その他→動作環境→編集」の「EUCコードとJISコードの自動認識をする」がオフになっているならオンにしましょう。

また、これがオンになっているにも関わらず秀丸エディタで
[esc]$B4A;z[esc](B
のように見えるとしたら「どこかに、JISコードと判定することが出来ない、コードが間違っている文字」が含まれている可能性があります。

この回答への補足

後者です。

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

補足日時:2008/12/03 11:51
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/12/03 15:29

>書き込み後にファイルをwindows上などで普通に開いた時に、


「普通に開く」とはどういうことですか?
エディタで見るということは違うでしょうか。
(いわゆる)JIS形式のエンコーディングに対応しているものであれば
制御コードが見えるとか言うことはないと思いますが、どういった状況を言われているのでしょうか。

>教えていただいた内容ですと、制御コマンドも表示されてしまいます。
どこに対してどのようにして「表示」しているのですか?

この回答への補足

秀丸エディタで見る、ということです。

#3さんのコードでは確かに正確に書き込みされており、
制御コマンドも表示されていませんでした。

しかし、その補足に書かせていただいた内容コードですと
制御コマンドも表示されてしまいました。

補足日時:2008/12/03 10:12
    • good
    • 0

fprintf(fp, "\x1b$B");


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

この回答への補足

説明不十分でしたようで、
書き込み後にファイルをwindows上などで普通に開いた時に、

<ESC>$B「漢字」<ESC>(B ではなく、
「漢字」だけを表示させるようにしたいのです。

教えていただいた内容ですと、制御コマンドも表示されてしまいます。
実際にJISコードのファイルを見てみますと制御コマンド無しの
漢字が見えておりますが、fgets等で読みだしてみると、
漢字の前後に制御コマンドが埋め込まれていることがわかります。
この状態を作りたいと思っていますが、ただfprintfなどで書き込む
だけでは駄目なようで・・

この辺りおわかりでしょうか?

補足日時:2008/12/03 09:10
    • good
    • 0

★アドバイス


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

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