• ベストアンサー

$strの漢字コードをEUCにするには

どうしたらいいのでしょうか? 「とほほ」に以下のサンプルがありましたがそうしたら$strがEUCに成るのでしょうか? # $strの漢字コードをEUCにしておいて if ($str =~ /[\x80-\xff]/) { print "全角文字が含まれてます"; }

  • keyguy
  • お礼率68% (895/1314)
  • Perl
  • 回答数3
  • ありがとう数4

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

>3バイトの補助漢字も対応しているのでしょうか? 3バイトの補助漢字の意味は、EUCの意味ですよね。 多分大丈夫だと思います。 コードの対象表を作成しているサイト様があったので参考URL(ずっと下の方)にあげておきます。

参考URL:
http://hp1.jonex.ne.jp/~nakajima.yasushi/
keyguy
質問者

お礼

ありがとうございます

その他の回答 (2)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

Perlの5.8からPerlで扱う文字はunicodeになりました。 なので、プログラム中の漢字コードをいうのは無意味なような気がします。 入力するファイルのコードの指定 出力するファイルのコードの指定 が意味があって 例えば入力するファイル(や文字)がシフトJISで 出力がEUCであるというのは、意味があります。 その場合でも、Perlで扱っているのは、unicodeを扱っています。 質問文のプログラムは、1バイトのどの領域が使われているかを調べて、ASCIIでない(つまり全角である)ということを調べているようです。 そういうテストをしたからといって文字列のコードを変換しているわけではありません。 回答になっていなかったらすみません。

keyguy
質問者

お礼

ありがとうございます 3バイトの補助漢字も対応しているのでしょうか?

  • fukku22
  • ベストアンサー率57% (15/26)
回答No.1

このサンプルは「全角文字が含まれているかの判断」だけで、$str は何も変わっていません。 (そもそも、変換用途には使えないでしょう。) Perl の場合、漢字コード変換は jcode.pm (または古い jcode.pl)を使います。 参考URLは「jcode pm」の検索結果です。 この辺りのどこかに変換方法が説明されていると思います。

参考URL:
http://www.google.co.jp/search?hl=ja&c2coff=1&q=jcode+pm&lr=
keyguy
質問者

お礼

ありがとうございます jocde.pl は格納済みです 「とほほ」に書いている意味が分からなかったのです

関連するQ&A

  • コード変換について

    このような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[] = "あいうえお" などとなっているにはどうやってこの関数を活用すればいいのでしょうか。

  • EUCからSJISに上手く変換できない

    以下のような関数でEUCからSJISに変換しているのですが、 「渕」という字が文字化けしてしまいます。 どんなふうに修正したらいいか、教えて下さい。 【関数】 void euc2sjis(BYTE *code1, BYTE *code2) {   if (*code1 & 0x01) {     *code1 >>= 1;     if (*code1 < 0x6F)       *code1 += 0x31;     else       *code1 += 0x71;     if (*code2 > 0xDF)       *code2 -= 0x60;     else       *code2 -= 0x61;    } else {     *code1 >>= 1;     if (*code1 < 0x6F)       *code1 += 0x30;     else       *code1 += 0x70;     *code2 -= 0x02;    } } 【補足】 「渕」は、EUCではDEB0      SJISでは9FAEだと思います。

  • str_replaceとpreg_replace

    phpで、汎用環境で文字化けしそうな文字を,ad hoc に機種依存しない文字に置換する過程に関して質問させて頂きます。 例えば(株)を(株)に、置換等です。 宜しくお願いいたします。 こちらのページのコードで、 http://memo.xight.org/2006-06-19-13 もともと、以下のようなコードサンプルA(推測)が、 -----▼サンプルA $arr=array('\xE3\x8A\x91' => '(株)',………); foreach ($arr as $key => $val) {  $str_rep = preg_replace("/$key/", $val, $str_rep); } -----▲ こちらの方の指摘で、 http://blog.poyo.jp/archives.php/categ-1/year-2006/month-6/id-1150817399 -----▼サンプルB $arr=array('\xE3\x8A\x91' => '(株)',………); return str_replace( array_keys( $arr), array_values( $arr), $str); -----▲ コードサンプルBに、変更(改善?)されたようです。一見、なるほどと思うのですが、実際にサーバ上で試したところコードサンプルAは問題なく機能しますが、コードサンプルBは機能しません。(特殊文字にマッチしない) 私の環境の問題で機能しないだけなのか、サンプルBを提示していた方の早まりなのか、判断がつかずに困っています。 ただし、'\xE3\x8A\x91'のようなユニコード文字列を、(株)といった文字に打ち変えて実行すると、きちんと認識して、置換が行われます。 str_replaceとpreg_replaceの機能の違いによるものだと思ったのですが、今回、このコードを利用し、80,000件位のコメントに置換をかけようとしているため、少しでも早く軽く置換できる方法を探しております。 見た目的にはループで走査していくよりも、str_replaceでスパっと置換した方が早そうに感じるので、できるならばサンプルBのような書き方で置換する様をベンチマークしたいと考えております。 なぜ、コードサンプルBが機能しないのか、また、正常に機能させるためには何が必要なのか、アドバイス・ご教示頂けましたら幸いです。 ちなみにコードサンプルAの元は、以下かと思いますが、こちらはまったく問題なく機能することが確認できています。 http://www.happytrap.jp/blogs/2009/09/11/1393/

    • ベストアンサー
    • PHP
  • EUCの漢字第1バイトを判定する

    EUCの文字列の最終文字が漢字第1バイトであるかを判定 したいのですが・・・・。 char work[21]; . . memcpy(work, &buf[0], 20); if(work[19] >= 0xa1 && work[19] <= 0xdd || work[19] >= 0xdf && work[19] <= 0xfe){ . . このようなコードでworkにコピーした文字列の最後の文字が 漢字第1バイトか判定しています。 しかし、コンパイルではwaningがでて処理もうまくいきません。 よい方法を教えていただけないでしょうか? よろしくお願いします。

  • 漢字コード?について

    漢字コードは代表的な物にJISコード、シフトJISコード、EUCコード、UTFコードがありメールの漢字コードとしてISO-2022-JPがあると習いました。ですがISO-2022-JPはJISコードの一種であるように、EUCコードならEUC、UTFコードならUTF-8などがあると思うのですが、これらはメールの漢字コードとして使用されていないということでしょうか? また、それぞれの特徴?などを教えていただけると助かります。 よろしくお願いします。

  • WindowXP環境でEUCコード文書を扱えますか?

    こちらはWindowXP環境です。 PHPの本についていたCDから サンプルcodingを メモ帳で開いたら 文字化けしてました 原因はEUCコードだから そこで質問です EUCコードのままで処理しようと仮定すると EUCコードのファイルを開いたら ShiftJISに変換して画面表示し 編集を行って 結果をまたEUCコードに変換して ファイルに書き込んでくれる エディターというものがあるんでしょうか たま~にWZeditorをつかいますが このWZeditorにはこうした機能はありませんか よろしくおねがいします。

  • エスケープ文字にstr_replaceが効かない

    フォームで送信された文字列のうち、str_replace関数を使って半角記号を全角記号に置換したいのですが、一部のエスケープ文字が含まれている文字列の置換が上手くいきません。 ソースは以下に記しますが、現状では、"(ダブルクォート)は\&quot;、&(半角アンド)は&amp;と置換されてしまいます。 この場合であれば、”(全角ダブルクォート),&(全角アンド)と出力させたいのですが・・・ どなたかお気づきの点ありましたらご教示宜しくお願いします! ===============ソースコード================================= <?php $system = ""; if (isset($_POST["submit"])) { $system = htmlspecialchars($_POST["system"], ENT_QUOTES); $system = mb_convert_encoding($system, "EUC-JP", "SJIS"); $system = str_replace('&', '&', $system); $system = str_replace('"', '”', $system); $system = str_replace('あ', '”', $system); $_SESSION["system"] = $system; } $str = <<<STRING <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> </head> <body> <form method="post" action="{$SERVER['PHP_SELF']}" enctype="multipart/form-data" > <textarea name="system" cols=40 rows=5 wrap=soft>{$system}</textarea> <input type="submit" name="submit" value="送信"> </form> ----------------------------------------------------------<br> {$_SESSION["system"]} </body> </html> STRING; $str = mb_convert_encoding($str, "SJIS", "EUC-JP"); echo $str; ?> ============================================================ ちなみに、『あ』→『”(全角ダブルクォート)』と、正しく置換されます。

    • ベストアンサー
    • PHP
  • WindowsでEUCコードのファイルは出力できますか?

    Windowsのプログラム(VBなど)でEUCコードのファイルを出力することはできるのでしょうか? 出力するファイルに全角文字はありません。 プログラム以外の方法でも、簡単な方法があれば 教えて下さい。 よろしくお願い致します。

  • Jeditで漢字コードを変更したのですが・・・(Mac)

    Jedit4にネットで調べたCGIのソースをペーストして、ファイル形式:Jeditテキストのみ、漢字コード:EUC、改行コード:LF(Unix)で保存しました。しかし、このファイルを再度開くと必ず漢字コードがシフトJISになってしまいます。EUCで保存できるものもあります。これはなぜなのでしょうか?ご存じの方教えてください。OSはMac OS 9.2を使用しています。ちなみにコピーしたソースは以下の通りです。よろしくお願い致します。 ------------------ここから #!/usr/bin/perl $acc=$ENV{"HTTP_ACCEPT"}; if($acc=~"wml"){ if($acc=~"hdml;version=3.0"){ print "Location: http://www.mysite.com/index.hdml\r\n\r\n";} } else{ print"Location:http://www.mysite.com/index.wml\r\n\r\n"; } } else{ print"Location:http://www.mysite.com/index.html\r\n\r\n"; } -----------------ここまで

    • ベストアンサー
    • CGI
  • 文字コードEUC-JPは、文字集合なのか符号化方式なのか?

    文字コードEUC-JPは、文字集合なのか符号化方式なのか? 文字コードの文字集合・符号化方式についてWikipediaをみて 勉強をしていたのですが、途中で分からなくなりました。 とりあえず、文字集合・符号化方式それぞれの具体例を把握することにより まずはイメージをつかもうとしていました。 文字コード - Wikipedia http://ja.wikipedia.org/wiki/%E6%96%87%E5%AD%97%E3%82%B3%E3%83%BC%E3%83%89 「2(符号化)文字集合、文字符号化方式」の内容についてです。 以下の部分を読んだところ # 日本語には JIS X 0208 というひとつの文字集合に対して # ISO-2022-JP (JIS コード等と呼ばれることが多い)、EUC-JP、 # Shift_JIS など複数の符号化方式が存在する。 以下だと解釈しました。 →文字集合 :JIS X 0208 →符号化方式:ISO-2022-JP(JISコード)、EUC-JP、Shift_JIS 一方以下の部分を読んだところ # また、それぞれ異なる文字集合を同じ符号化方式とする関係もあり、 # 例えば符号化方式 EUC に対して EUC-JP、EUC-KR、GB2312 (EUC-CN) # などがある。 以下だと解釈しました…。 →文字集合 :EUC-JP、EUC-KR、GB2312 (EUC-CN) →符号化方式:EUC で、「EUC-JP」が文字集合なのか符号化方式なのか 分からなくなってしまいました。Wikipediaの記述が間違っているのか、 「EUC-JP」は文字集合でもあり符号化方式でもあるのか分かりません。 「EUC-JP」が文字集合なのでしょうか? それとも符号化方式なのでしょうか? その両方であるのでしょうか? Wikipediaの記述が間違っているのでしょうか? この辺について教えてください。よろしくお願いします。

専門家に質問してみよう