• ベストアンサー

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

  • diffコマンドでのjisとsjisの漢字項目の扱いについて

    HP-UXで使用文字コードをsjisで設定しています。 漢字項目を含むsjisで作成したファイルと、 同内容のjisで作成したファイルをdiffコマンドで比較した場合、 jisの漢字項目にエスケープシーケンスがつくと思っているのですが、相違点として表示されるのでしょうか? また、このjisで作成されたファイルをcpコマンド等で、 別ファイルにした場合にsjisのファイルになるのでしょうか? 仮にsjisとなった場合に、漢字のエスケープシーケンスはどのような扱いになるのでしょうか? (現在、近くに環境がなく確認できませんので、この場を借りて質問致しました。)

  • シフトJIS/7ビットJISの変換ライブラリについて

    C/C++で使える漢字コード変換のライブラリを探しています。 以下の条件に当てはまるライブラリ等ご存じでしたら、教えていただけないでしょうか? 1.C/C++で使用可(VisualC++, BorlandC++Builderなど、Windows環境) 2.シフトJISと7ビットJISコードの変換が可能(sjis -> jis, jis -> sjis) 3.SI/SO方式(0x0E/0x0F)でカタカナ/アルファベットを切り替えている7ビットJISコードからシフトJISへの変換が可能。また、同様に、シフトJISからSI/SO方式の7ビットJISコードへの変換が可能 4.ソースコードがあれば尚良い。 特に、3.のSI/SO方式で変換可能ライブラリを探しているのですが、なかなか見つかりません。 「ESC(I」「ESC(J」「ESC$B」を使用してアルファベット/カタカナの変換はどのライブラリでもできているのですが、上記のSI/SO方式での変換ができません。 現在までに評価して駄目だったものをリストにしてみます。 これ以外にご存じの方、もしくは、このリストに載っているものでも可能だよ!、というご意見などいただければ幸いです。 ・nkf for windows http://www.vector.co.jp/soft/win95/util/se295331.html ・babel http://tricklib.com/cxx/ex/babel/ ・漢字コード変換ライブラリ http://www.vector.co.jp/soft/win95/prog/se087586.html ・ack http://hp.vector.co.jp/authors/VA004474/win/ack.txt ・SJET http://www.vector.co.jp/soft/dl/dos/util/se018396.html

  • 漢字コード変換ツールについて

    jis⇔sjis⇔euc等の変換するツールは、よくあるのですが、ユーザーの漢字変換テーブル(FROM CODE:TO CODE)通りに変換してくれるツールをご存知ないでしょうか。複数ファイルのテキストを定例的に変換するため、VBでなくBATファイルで動作させられる物を探しています。 利用目的は以下の通りです。 ・汎用機(メーカ独自漢字コード)⇔sjis漢字コードへの変換 以上、よろしくお願いします。

  • JIS漢字コード

    どなたかご教授下さい。 現在、産業用のラベルプリンタでラベルを作成しておりますが そのラベルプリンタは、JIS漢字コードでの入力しかできません。 JIS漢字コード表を見ながら、項目を入力していかなければならない為、非常に 時間がかかってしまいます。 PCであらかじめ項目を入力して、JIS漢字コードに変換するような事は可能で しょうか?(例:あいう→2224,2424,2624) もしくは、そういうフリーのソフト等はあるのでしょうか? ご解答お待ちしております。宜しくお願い致します。

  • 文字操作をしたjisコードをシフトjisに変えたい

    携帯メールをCGIで受け取って処理するスクリプトを書いているのですが 文字コードの処理について行き詰っています。 $str = " $B$F$9$H (B"; #jisコードで"てすと" として、この文字列をjcode.pmでシフトjisに変換したいのですが $body = Jcode::convert($str, 'sjis'); このようにしても$bodyの中身は" $B$F$9$H (B"のまま変わりません。 MIME::parserでうけとったjisコードの文字列はちゃんと変換されるのでjcode.pmに問題はないと思われますが、 文字列操作をして変数に入れるとMIME::parserで受け取った場合とおなじ内容でもデコードされないとゆう結果になります。 なにか根本的に違うのでしょうか… スペースを省いてみたり $body = Jcode::convert($str, 'sjis','jis'); としてみたりしたのですが まったくダメでした。 ちょっとしたアドバイスだけでもいいのでよろしくお願いします。 あとお金がかかってもよいので、そういった問題を解決できそうなサイトなどがあれば紹介していただければと思います。 よろしくお願いします。m(__)m

  • IBM漢字コードのSJIS変換方法

    こんにちは。 現在IBMホストのデータをFTPしてUNIX上にて使用しています。ファイルの内容はcsvファイルで、ある項目は英数字のみ、ある項目は漢字のみというような物です。 現在、英数字は上手くいってますが、漢字の部分が化けてしまっています。 今やっているやり方は、ホストのファイルをbinaryモードでFTPして、ddコマンドにてEBICDICコードをASCIIコードに変換します。しかし、漢字の部分が化けているという状況です。 IBMのホームページをみると、 「IBM漢字コードとシフトJISとの変換は、オペレーティング・システム標準の iconvコマンドとiconv()サブルーチンで可能ですので、こちらをご利用下さい。 」 と書いてありますが、まったく要領を得ません。 iconvをmanのコマンドで見ましたが、書いてある内容が理解できません。 どなたか同じような経験をしたかた、アドバイスをよろしくお願いします。 iconvのオプションはこう付ければ上手くいくとか、 変換表を自前で作成したなどなど、他にこんな方法があるなどヒントをいただけると助かります。

  • 独自コード変換方法について

    UNIX-Cにて独自でファイルから読みこんだ文字をSJIS→JISまたはJIS→SJISに変換する関数を作成したいのですがどのように作成すべきか全く検討がつきません。 色々なHPも探してみたのですが変換プログラムの紹介やコマンド(nfk)などの使い方などがほとんどで・・・。 何か参考になるHPをお知りのかた、または簡単に作成できるヒントを下さればと思います。 よろしくお願いします。

  • jcodeでsjisに変換できない

    メールのSubjectを取得するスクリプトを作っています。 Subjectを取得し、iso-2022をsjisに変換して表示したいのですが、変換できません。 以下、どこに問題ありますでしょうか? すみません、他人の作ったものを修正しているので、よく理解していない部分が多いです。 #--------------------------------------------- require 'jcode.pl'; $subject = 'Subject: =?iso-2022-jp?B?GyRCJWEhPCVrJE4lRiU5JUgbKEI=?='; &jcode'convert(*subject, 'sjis'); print "-->$subject\n"; #--------------------------------------------- これをWindowsのDOSプロンプトから実行しても、以下のようにShift-JISに変換されていません。 c:\test>perl test.pl -->Subject: =?iso-2022-jp?B?GyRCJWEhPCVrJE4lRiU5JUgbKEI=?= 環境 Perl v5.8.8 WindowsXP(sp2) 以上、よろしくお願いします。

    • ベストアンサー
    • Perl
  • コード変換について

    このようなS-JISからEUCにコードを変換する関数のサンプルで見つけたのですが。これを実装するにはどうすればいいのかわかりません。 unsigned int sjis2euc(unsigned int sjis) {   unsigned int hib, lob;   hib = (sjis >> 8) & 0xff;   lob = sjis & 0xff;   hib -= (hib <= 0x9f) ? 0x71 : 0xb1;   hib = (hib << 1) + 1;   if (lob >= 0x9e) {     lob -= 0x7e;     hib++;     } else if (lob > 0x7f) lob -= 0x20;   else lob -= 0x1f;   hib |= 0x80;   lob |= 0x80;   return (hib << 8) | lob; } たとえば char *str[] = "あいうえお" などとなっているにはどうやってこの関数を活用すればいいのでしょうか。

  • SFU3.5のiconvコマンドで文字コード変換(EUC->SJIS)すると'-'が'_'に誤変換されてしまう

    OS:Windows Server 2003 SFUバージョン:Microsoft Windows Services for UNIX 3.5 ファイルの文字コードをEUCからSJISに変換するため以下コマンドを実行しました。 >iconv -f 20932 -t 932 EUC_FILE.txt > SJIS_FILE.txt この後、変換後のSJIS_FILE.txtを参照すると、ほとんど問題ないのですが一点だけ問題があり、'-'が'_'に誤変換されていました。 例を挙げると、以下のような誤変換です。 ○ スウェ-デン輸出信用銀行 × スウェ_デン輸出信用銀行 もしかすると、EUC=20932,SJIS=932と指定しましたが、このコードが間違っているのでしょうか?参考までにコードのリストを以下に出力します。(明らかに関係なさそうな出力は文字数節約のため削除します。) >iconv -l 10001 (MAC - 日本語) 1146 (IBM EBCDIC - 英国 (20285 + ユーロ)) 20127 (US-ASCII) 20261 (T.61) 20269 (ISO 6937 Non-Spacing Accent) 20290 (IBM EBCDIC - 日本語 カタカナ拡張) 20932 (JIS X 0208-1990 & 0212-1990) 20936 (簡体字中国語 GB2312) 21027 (Ext Alpha Lowercase) 437 (OEM - 米国) 500 (IBM EBCDIC - インターナショナル) 50220 (ISO-2022 日本語、半角カタカナなし) 50221 (ISO-2022 日本語、半角カタカナ) 50222 (ISO-2022 日本語 JIS X 0201-1989) 932 (ANSI/OEM - 日本語 Shift-JIS) 936 (ANSI/OEM - 簡体字中国語 GBK) 949 (ANSI/OEM - 韓国語) 950 (ANSI/OEM - 繁体字中国語 Big5) 54936 (GB18030 簡体字中国語) 28603 (ISO 8859-13 ラテン 7) 65000 (UTF-7) 65001 (UTF-8) 以上、解決策などご存知の方どうぞご教授のほど、よろしくお願いいたします。

専門家に質問してみよう