• 締切済み

TCL言語の文字コード指定方法

UNIX環境にて、OS時間を以下のフォーマットで 出力したいと考えています。 YYYY/MM/DD hh時mm分ss秒 ファイル出力の関数はTCL言語にて実装しています。 上記の関数をC言語で実装した関数より呼び出します。 ファイルを出力した際、出力結果にて日本語部分が 文字化けしてしまいます。 OS時間の取得はTCL関数内で実施しています。 文字コードをうまく設定できていないのだと思うのですが、 ファイル出力関数を呼び出す関数側(C言語で実装している関数側)にて、 文字コードを指定する方法をご存知の方はいらっしゃいませんでしょうか? よろしくお願い致します。

みんなの回答

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2
参考URL:
http://www.geocities.co.jp/SiliconValley/4137/dir4/tapi42.html
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

CプログラムからTclの関数を呼び出すというのはわかりましたが、 それはどのような形式で呼び出しを行っているのでしょうか? ・Tclによるスクリプトを systemなりで呼び出している ・TclインタプリタをCプログラムにリンクしており、TclのAPI経由で (Tclで記述された)関数を呼び出している また、単にOS時間を任意のフォーマットで整形した文字列を得るだけなら 引数はいらないような気もしますが、Cから呼び出すときになにか引数は 渡していますか? PerlIOみたいなからくりはTclにはなかったように記憶しているので、 どこかで変換されておかしくなるということはないと思うのですが、 どのようなエンコーディングのどのような文字列を渡していて 得られる結果はどんなものなのでしょうか? 文字化けを確認したのはコンソール画面ですか、あるいはなにかのエディタなりビュアーでみてですか?

関連するQ&A

  • TCL言語で文字列検索方法を教えてください。

    こんにちは TCL初学者です。 romは複数出てくる場合あり。 ある配列に ******rom****** という文字列があります *:は任意の数字や文字や記号です。 romという並びを見つけたらFLAG=1 romという並びが無ければFLAG=0 のような関数を作るのはどうしたらよいでしょうか? C言語やPASCALなら読めます。 ただTCLで記述した事が無いので、想像が出来ません よろしくお願いします。

  • C言語から、TCL84.dllを介してTCL言語を実行しているのですが

    C言語から、TCL84.dllを介してTCL言語を実行しているのですが、 Tcl_OpenFileChannelに日本語ファイル名指定して実行すると、失敗してしまいます。 一応 Tcl_Eval(interp, "encoding system utf-8"); と指定して実行してみたり、ファイル名をUTF-8に変換して、char *にキャストして 渡してみましたが、駄目でした。 TCLのバージョンは8.4で、内部処理はUTF8のはずなのですが、何が問題かわかりません。 解決法をご存知の方がおられましたら、お教えください。お願いします。

  • C言語にてコード変換する方法

    C言語でSJISデータをUTF8データに変換することって可能でしょうか? クライアントはWinNTでサーバがUnixであり、 ある設定データのコードを変換したいのですが、簡単にできる関数など ありますでしょうか?

  • 文字コードの変換

    今、C言語の勉強をしているのですが、 EUC-JPの文字コードのファイルを読み込んでUTF-8の文字コードのファイルに変換したい場合はどうすればいいのでしょうか? それか、ファイルに書き込む時に文字コードをEUCーJPからUTFー8に変換して出力する方法でもいいです。 調べ足りないのかもしれませんが色々調べてもよくわかりませんでした。 よろしくお願いします。

  • C言語での改行コードの扱いについて教えてください。

    改行コードは一般的に、 Windows・・・「CR+LF」 UNIX or Linux・・・「LF」 だと思うのですが、改行コードが「LF」のファイルをWindows上で、C言語で編集したらどういった改行コードになるのでしょうか。 (例えば、単純にファイルを1レコードずつ読み込んで別ファイルに書き込むといった処理) 出力時に「CR+LF」になってくるのでしょうか?それともまったく別のものになってしまうのでしょうか? 詳しい方、ぜひ教えてください。 ※改行コード「LF」のテキストファイルは、UNIXサーバから「HULFT」というファイル転送ソフトの「バイナリ転送モード」でWindowsサーバに送られてくる予定です。

  • DATETIME型からUNIX時間を求める方法

    現在、MYSQL、DATETIME型 YYYY-MM-DD HH:MM:SS からUNIX時間を求める際に、気軽に質問出来る詳しい方が知り合いにおらずPHP学習中で知識が乏しいため、YYY-MM-DD HH:MM:SS をスペースで分割、をハイフンで分割、HH:MM:SSをコロンで分割、その後、mktimeに当てはめてUNIX時間を求めています。 他に簡単にDATETIME型からUNIXTIME求める関数などがありましたらご教示頂けましたら嬉しいです。 それとも、計算が必要な日時をMYSQLに格納する場合はINSERTする場合にUNIX時間でINSERTし、表示が必要な場合に、DATE関数等で日時として表示する方が良いのでしょうか?

    • ベストアンサー
    • PHP
  • VisualStudioの文字コードについて

    現在、WindowsとLinux(Unix)でソケット通信を行い、文字のやり取りをするプログラムを作成しています。 ソースコードやコンパイルの環境は、 Windows側(Windows7):C言語(Windowsプログラミング)、VisualStudio2013でビルド&実行 Linux側:C++、g++(Cygwinを使用) です。 Windows側のソースコードがShift-JIS、Linux側がUTF-8であり、このままだと文字化けしてしまうため、Windows側のソースコードをUTF-8に変更(VisualStudioでソースコードを保存するときに「エンコード付きで保存」を使用)して再度ビルド、実行を行ったのですが、やはり文字化けしてしまいます。 ソースコードの文字コードを変更しただけでは不十分なのでしょうか? 原因があまりよく分からず困っています。 もし何か分かることがあれば教えていただきたいです、よろしくお願いします。 (もしかしたらカテゴリ違いかもしれません、申し訳ありません)

  • 文字コード変換プログラムについて

    c言語でfgetcでファイルを読み込みをiconv関数を使用して文字コードを変換したいのですが、サンプルソースを知っている方、もしくはソース知っている方教えていただけますか?

  • ORA-01858: 数値を指定する箇所に数値以外の文字が指定されています

    <エラーメッセージの内容> ORA-01858: 数値を指定する箇所に数値以外の文字が指定されています 開発言語は、java,oracle10g express editionです スケジュールを登録する画面のところの日付のインサートで失敗します。「→」の部分です。 <以下のSQLをSQL/PLUSで実行するとうまくいきます> insert into schedule values(1, 1, '予定1', '予定1です', TO_DATE('2009-06-01 10:00','YYYY/MM/DD HH24:MI:SS') , TO_DATE('2009-06-01 12:00','YYYY/MM/DD HH24:MI:SS'), 'A社', '予定1のコメントです。',1); <問題のソースコード> * スケジュール情報をデータベースに新規保存する public void create(Schedule schedule) { String sql = "insert into " + SCHEDULE_TABLE_NAME + " (id, user_id,subject,content, start_time, end_time, place, comment1, is_publish) values(?,?,?,?,?,?,?,?,?)"; Connection con = null; try { con = createConnection(); con.setAutoCommit(false); int id = getNextId(con, SCHEDULE_TABLE_NAME); PreparedStatement stmt = con.prepareStatement(sql); →stmt.setString(5,toString(schedule.getStartTime())); →stmt.setString(6, toString(schedule.getEndTime())); * 日付を文字列表現(yyyy-MM-dd HH:mm)に変換する private String toString(java.util.Date date) { SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm"); →return "TO_DATE('"+"'"+sd.format(date)+"'"+",'YYYY/MM/DD HH24:MI:SS'"+")"; } ネット、本などでいろいろ調べましたが、わからなかったので、ヒントになることでもいいので、ご教授よろしくお願いします。

    • ベストアンサー
    • Java
  • C言語で、文字とか入力されなくても実行を続けたい

    現在簡単なゲームをunix系のOSのC言語でつくってますが なにも入力されなくても停止せず実行を続けられる getcharのような関数はないのでしょうか? windows系のOSにはcons.hヘッダーあたりに そんな関数あったような気がするのですが。。。 普通のgetcharだと、文字が入力されるまで(enter押されるまで) そこで実行が一時中断されてしまい リアルタイムで動くプログラムができないのですが。。。

専門家に質問してみよう