• ベストアンサー

DATE関数でYが文字化けします

racciの回答

  • racci
  • ベストアンサー率64% (9/14)
回答No.1

恐らくSJISでプログラムを書いているからだと思います。 SJISの「年」は、0x94 0x4e の2バイトです。 2バイト目の 0x4e は 「N」という文字と一致します。 date関数においては、「Y」が西暦四桁数字に置き換えられるように、「N」は曜日を示す数字に置き換えられます。 それによって文字化けが発生しているのだと思います。 そういうわけで、SJIS以外でプログラミングしましょう。

htgo
質問者

お礼

早速の回答有難う御座います、ところでSJISとはシフトJISのことでしょうか、それならば具体的にはどうしたらよいのでしょうか。 Editorを変えてやるとかしても駄目なのでしょうか。 キーボードを変えるしかないのでしょうか。

関連するQ&A

  • fprintfでの文字化け

    Cで作ったプログラムなのですが最後の部分でファイルに出力すると数字が 文字化けして出てきます(‰など)その原因を教えて頂ければ嬉しいです 他にも何かあれば教えてください プログラミングは詳しくないのでゴロゴロ見つかるかもしれません 【プログラム】 #include <stdio.h> #include <math.h> #include <stdlib.h> #include <time.h> int a,i,j,k,t; double p,p1,b; int X[999][1000],Y[999][1000]; int s0,s1,delta; int main(void) { int**X = calloc(sizeof(int),sizeof(int)*1000); int**Y = calloc(sizeof(int),sizeof(int)*1000); FILE *output; output=fopen("monte.dat","w"); b = 0.01; /*逆温度*/ srand((unsigned int)time(0)); /*メモリの確保*/ if( X == NULL ){ exit( EXIT_FAILURE ); } for(i=0; i<=999; ++i){ /* 各列分の領域を割り当てる */ X[i] = (int*)calloc(sizeof(int),sizeof(int)*1000); } if( Y == NULL ){ exit( EXIT_FAILURE ); } for(i=0; i<=999; ++i){ /* 各列分の領域を割り当てる */ Y[i] = (int*)calloc(sizeof(int),sizeof(int)*1000); } /*終わり*/ /*初期配列の設定*/ for(i=0;i<1000;i++){ X[0][i]=a; a = (int)((rand() / ((double)RAND_MAX+1.0)) * 2);//debag } /*終わり*/ for(t=0;t<2;t++){ //debag /*配列中a番目を抽出*/ a = 10; //debag /*終わり*/ /*a番目のスピンを逆にした配列作成*/ for(j=0;j<1000;j++){ Y[t][j] = X[t][j]; } Y[t][a] = (X[t][a]+1)%2; /*終わり*/ /*遷移確率p1計算*/ s0=0; s1=0; for(k=0;k<1000;k++){ s0=s0+pow(-1,X[t][k]+X[t][k+1]);//(11),(00)なら値1 s1=s1+pow(-1,Y[t][k]+Y[t][k+1]);//(10),(01)なら値-1 } delta = -s1 + s0; p1 = 0.5 * (1 - tanh(0.5 * b * delta)); printf("%d %d %d %f ",s0,s1,delta,p1); //←この時点ではX[t][]は正しく出力する /*終わり*/ /*新しい配列(i番目の符号を交換するか)*/ p = (double)((rand() / ((double)RAND_MAX+1.0)) * 1); for(j=0;j<1000;j++){ X[t+1][j] = X[t][j]; } if(p<=p1){ X[t+1][a] = (X[t][a]+1)%2; printf("交換したよ! %d → %d\n",X[t][a],X[t+1][a]); } else{ X[t+1][a] = X[t][a]; printf("交換しないよ!\n"); } /*終わり*/ } /*記入*/ for(i=0;i<1000;i++){ fprintf(output,"%d ",X[0][i]); //←ここが文字化けする } fprintf(output,"\n"); for(i=0;i<1000;i++){ fprintf(output,"%d ",Y[0][i]); //←出力されない } /*終わり*/ fclose(output); return 0; } 【プログラム終】

  • newとdeleteでのアサート

    C++とViasulC++2003にて、 現在時刻を取得する関数を作成しているのですが、 以下のようなアサートが表示され強制終了してしまいます。 > _BLOCK_TYPE_IS_VALID(pHead->nBlockUse) おそらくnewとdeleteあたりで発生しているのは確かなのですが、 その原因が解らずにこまっています。 どうか、アドバイスをよろしくお願いします。 プログラムのソースは以下の通りです。 #include <time.h> void get_date( int *year, int *mon, int *day, int *week ){ tm *mytime = new tm(); time_t long_time; time( &long_time ); mytime = localtime( &long_time ); *year = mytime->tm_year + 1900; *mon = mytime->tm_mon + 1; *day = mytime->tm_mday; *week = mytime->tm_wday; delete mytime; mytime = NULL; } int main(){ int y, m, d, w; get_date( &y, &m, &d, &w ); }

  • 年と曜が文字化け・・・対応策教えてください

    PHP初心者です・・・すみませんがご指導のほど お願いします。 制作環境 windows2000 apache(virsion2.2) php5(5.1.1) <html> <body> <?php $japan_youbi=explode("/","日/月/火/水/木/金/土/日"); $youbi=date(w); $jikan=date("Y年m月d日 $japan_youbi[$youbi]曜日 H時i分s秒"); print($jikan); ?> </body> </html> 上記の用にPHPを書くと「年」と「曜」が文字化けします・・・ 上記の保存は「shift-JIS」で行っております。 php.iniの設定が怪しいのですが・・・よくわかりません・・・ mbstring.language = Japanese mbstring.internal_encoding = EUC-JP mbstring.http_input = auto mbstring.http_output = SJIS mbstring.encoding_translation = On mbstring.detect_order = auto mbstring.substitute_character = auto すみません・・・どの用にしたら文字がでてくるので しょうか? メモ帳で作っているため、保存はすべてShif-JISで 行いたいです。 ご指導のほどよろしくお願いします。

    • ベストアンサー
    • PHP
  • JAVAで時刻に対して簡単な四則演算をしたい

    初歩の質問ですが、 現時刻の時間や分に+1をしたりしたいのですが、やり方がわかりません。 月+1はできました。 それと、if文が無効になるのはなぜでしょうか。 しょうむない質問ですが、教えてください。 <script language="JavaScript"> <!-- date = new Date(); wday = new Array("日", "月", "火", "水", "木", "金", "土"); mon = date.getMonth() + 1; document.write(date.getFullYear() + "年" + mon + "月" + date.getDate() + "日(" + wday[date.getDay()] + ") "); // --> <!-- time = new Date(); hour = time.getHours(); min = time.getMinutes(); if (min < 10) { min = "0" + min; } document.write(time.getHours() + "時" + time.getMinutes() + "分" ); // --> </script>

  • JavaScriptからphp関数の呼び出し

    javaScriptで1秒毎にphpの関数を呼び出しているのですが、 php側で、returnしている日時が動的に表示されません。 何がいけないのか教えて頂けますでしょうか? 色んな参考ページを見ると、phpの関数で動的に 動かせると書いてあるのですが、動的になりません。 -------------------------------------------------------- <jsphptest.htmlソース> <html> <head> <script type="text/javascript"src="jsphptest.php"></script> <script language="javascript"> <!-- function time() { //JavaScriptで日時表示 var now = new Date(); mon = now.getMonth()+1; day = now.getDate(); hou = now.getHours(); min = now.getMinutes(); sec = now.getSeconds(); year = now.getYear(); if (year < 2000) { year += 1900; } if (mon <= "9"){mon = "0" + mon;}; if (day <= "9"){day = "0" + day;}; if (hou <= "9"){hou = "0" + hou;}; if (min <= "9"){min = "0" + min;}; if (sec <= "9"){sec = "0" + sec;}; document.form1.j_tokei.value= year +"/"+ mon +"/"+ day +" "+ hou +":"+ min +":"+ sec; //PHP関数の呼び出し document.form1.p_tokei.value= php_time(); //1秒毎 setTimeout('time()',1000); } // --> </script> </head> <body onLoad="time();"> <form name="form1" mathod=post> JavaScript日時<input type="text" name="j_tokei" size=25><br> PHP日時<input type="text" name="p_tokei" size=25> </form> </body> </html> -------------------------------------------------------- <jsphptest.phpソース> <?php $str .= "function php_time(){"; $str .= "return('".date('Y-m-d H:i:s')."');"; $str .= "}"; echo $str; ?>

  • ruby-cgi メールは受信できるのですが文字化けしてしまいます。

    下記のように記載しましたが、日本語のメール本文が文字化けしてしまいます。 nkfあたりが怪しいと思うのですが、お手上げです。 よろしくお願いします。 #!/usr/bin/ruby -Ke require 'nkf' require 'cgi' require 'net/smtp' def sendmail(server, subject, body, sender, recipient) mail = '' # メールヘッダを作る mail << 'To: ' + recipient + "\n" mail << 'From: ' + sender + "\n" mail << 'Subject: ' + subject + "\n" mail << 'Date: ' + Time.now.strftime('%a, %d %b %Y %H:%M:%S %z') + "\n" mail << "\n" # メールの本文 mail << body # 送信! Net::SMTP.start(server, 25) {|smtp| smtp.send_mail(mail, sender, recipient) } end cgi = CGI.new output = '' output << "ああ" + ":\n" output << ' ' + "いいい".gsub(/\n/, "\n ") + "\n" NKF.nkf('-j -m0', output) sendmail('mailserver@**.co.jp', 'cgi sendmail', output, 'from@mail.co.jp', 'to@mail.co.jp'){|body| NKF.nkf('-e -m0', body) } cgi.out('type' => 'text/plain') { output }

    • ベストアンサー
    • CGI
  • 投稿内容が文字化けして記録されてしまう。

    #!C:/Perl/bin/perl require 'cgi-lib.pl'; &ReadParse(*answer); $data="$answer{'name'}\n$answer{'mail'}\n$answer{'sex'}\n$answer{'how'}\n$answer{'corner'}\n$answer{'kansou'}\n\n\n\n"; require 'jcode.pl'; &jcode'convert(*data,'euc'); ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time()); $mon=$mon+1; @youbi=('日','月','火','水','木','金','土',); $time="$mon月mday日youbi[$wday]曜日hour時$min分$sec秒$\n"; open(ANSWER,">>answer.dat"); flock(ANSWER,2); print ANSWER"$time$data"; flock(ANSWER,8); close(ANSWER); print"Content-type:text/html\n\n"; print<<EOF; <html> <head> <title>ありがとうございました</title> </head> <body> <center> <font size="2"> <coloe="black"> ご協力ありがとうございました<br><br><br> </font> </center> </body> </html> EOF exit; -------- 課題をだされたので、以上のような内容の アンケートフォームを作りました(作ったというか テキストをほとんど写しただけですが) 使用エディタは秀丸です。 実際、これをform.htmlから動かすと、answer.datに 記録される内容が文字化けしてしまい、読めないの です。 テキスト通りにやったつもりですが、「文字コードを EUCで保存」とあったのですが、EUCで保存すると 上述したスクリプトの日本語が文字化けしてしまう ため、そのまま(shift-jis)で保存しています。 課題が出せないと困るので、どうすれば記入した ものが文字化けせずに出力されるか教えていただけ ないでしょうか?

    • ベストアンサー
    • CGI
  • 日付求め

    お世話になります。 早速ですが、perlで以下のように 現在時刻を求め表示するロジックがあります。 ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($time); $year=$year + 1900; $mon =$mon + 1; $date81 = "$year年$mon月$mday日($days[$wday])"; $date82 = "$hour時$min分$sec秒"; この時、 例えば今年末であれば、 2009年1月1日0時と表示されると思います。 これを2008年12月31日24時と表示したいのですが、 何か妙案はあるでしょうか。 宜しくお願いします。

    • ベストアンサー
    • Perl
  • phpからxmlへの文字化け

    PHPについての質問です。PHPのバージョンは5です。 FLASH8で作ったスクリプトからPHPに変数を送り、その変数をPHPからXMLに送っています。 しかしPHPからXMLに送ると日本語がちゃんと表示されません。何かPHPの方でしないとまずいのですか? <FLASH> System.useCodepage = true; SendData = new LoadVars(); //送りたいデータを箱に詰める this.btn_mc.onRelease = function() { _root.SendData.pro1 = nam; _root.SendData.pro2 = sbj; _root.SendData.pro3 = mail; _root.SendData.pro4 = product; //データ(中身)を詰めた箱をgetFlash.phpに送信 _root.SendData.sendAndLoad("http://localhost/php/xml_php/xml12.php", _root.SendData); }; <PHP> <?php /*変数を入れる*/ $name = $_POST["pro1"]; $sbj = $_POST["pro2"]; $add = $_POST["pro3"]; $msg = $_POST["pro4"]; /*時間を取得する*/ $stamp = time(); $date = date('Y,m/d(D)', $stamp); /*xmlに追加*/ $xml_path = "test1.xml"; $xml = file_get_contents( $xml_path ); $replace_key = "<article>"; $add_xml = $replace_key."\n<entry name='$name' dat='$date' tit='$sbj' contents='$msg'/>\n"; $result = str_replace($replace_key,$add_xml,$xml); file_put_contents( $xml_path , $result ); ?> <xml> <?xml version="1.0" encoding="utf-8"?> <article> <entry name="ha" dat="2008,03/10(Mon)" tit="test" contents="hogehoge"/> </article> となっています。

    • 締切済み
    • PHP
  • dateコマンドで一日前の日付を出したい

    Linuxにおいて、4月1日に出力されたファイルが3/31の内容を含んでいるため、一日前の日付でファイルの転送を実施しようと考えております。 任意のファイルのタイムスタンプを「honjitu」に格納し、 ①honjitu=`date -r file1 +%Y%m%d` 次に「honjitu」の一日前の日付を「kyou」に格納したいです。 ②kyou=`date -d ${honjitu} '-1 day' +%Y%m%d` といった感じで実行しますと以下が表示されます。 date: invalid option -- '1' Try 'date --help' for more information. ②をどのように修正すれば、思った通りにいきますでしょうか。 ご教示よろしくお願いいたします。