• 締切済み

s///eg変換で

# ↓OKWEBでは半角カナ表示できないけど、半角カナのつもり @kptk = ( 'ヴ', 'ー', 'ッ', 'ガ', 'ギ', 'グ', 'ゲ', 'ゴ', 'ァ', 'ィ', 'ゥ', 'ェ', 'ォ', 'ア', 'イ', 'ウ', 'エ', 'オ', ・・・ ); # ↓こちらは全部全角カナ @kptv = ( 'ヴ', 'ー', 'ッ', 'ガ', 'ギ', 'グ', 'ゲ', 'ゴ', 'ァ', 'ィ', 'ゥ', 'ェ', 'ォ', 'ア', 'イ', 'ウ', 'エ', 'オ', ・・・ ); for(my $n = 0; $n < @kptk; $n++){ $data =~ s/$kptk[$n]/$kptv[$n]/eg; } などとして、半角カナを全角に直したいのですが、どうも半角の小さい'ァ'だけがまともに変換されません。 その付近の文字やそれ以降すべての文字が文字化けします。 インターネットエクスプローラ5から呼び出しています。 サーバーはソラリス。 文字コードはEUCです。

  • Perl
  • 回答数2
  • ありがとう数5

みんなの回答

  • ide1
  • ベストアンサー率77% (7/9)
回答No.2

私の環境で試したのですが、現象が発生しませんでした。 確認環境はソラリス、IE5SP2。 提示されたロジックで、半角小文字のアは全角小文字のア に変換されました。 また、それをブラウザで表示させたところ、文字化けは 起こりませんでした。 -> ソースにテキストエディタで見えないようなコード が混入していませんか?

haporun
質問者

お礼

どうやら、2バイト文字の2バイト目と1バイト目とマッチしてしまう関係で、小さいァだけが変な変換をされていたようです。 なんとか解決しました。 ありがとうございました。

haporun
質問者

補足

返事が遅くなってすみません。 対象となっているのは大きな半角アではなく、"ファイル" とかの小さな半角ァです。 ちなみに、この方法では2バイト文字の2バイト目と次の2バイト文字の1文字目にマッチすることがあって、文字化けすること頻出でした。 @kptk = (前回のとおり); @kptv = (前回のとおり); $eucpattern = sprintf('([%c-%c][%c-%c])', 0x8E, 0xFE, 0xA1, 0xFE); $eucpattern2 = sprintf('([%c-%c][%c-%c][%c-%c][%c-%c])', 0x8E, 0xFE, 0xA1, 0xFE, 0x8E, 0xFE, 0xA1, 0xFE); for(my $n = 0; $n < @kptk; $n++){ (length($kptk[$n]) == 4) ? ($data =~ s/$eucpattern2/$1 eq $kptk[$n] ? $kptv[$n] : $1/eg) : ($data =~ s/$eucpattern/$1 eq $kptk[$n] ? $kptv[$n] : $1/eg); } などとやって、必ずEUC文字とマッチさせるようにして、変換すべきなら変換するようにしてます。 でもなんか動作が変です。 個のアルゴリズムは間違っているのでしょうか。

  • natural
  • ベストアンサー率37% (419/1115)
回答No.1

不具合の原因は解りかねますが、単純に半角から全角にしたいだけならばh2z_xxx(xxxは変換したい文字コード:jis、sjis、euc)という関数をコールすれば簡単に変換出来ますよ。 例えば、 &jcode'h2z_sjis(\$v); の様にすると、変数vに格納されている文字列中の半角カナを全て全角カナに変換することが出来ます。 お試し下さい。 注)jcode.plが使用可能になっている必要があります。 #ちなみにh2zとは「半角to全角」の略称と思われます。 #逆の機能を持つものとして、z2h_xxxもあります。

haporun
質問者

お礼

どうやら、2バイト文字の2バイト目と1バイト目とマッチしてしまう関係で、小さいァだけが変な変換をされていたようです。 なんとか解決しました。 ありがとうございました。

haporun
質問者

補足

配布したいので、できればjcode.plが使えるかどうかの環境を選びたくないのです。 小さい半角のァには、EUCでも困るようなエスケープシークエンスが入っているんでしょうか。

関連するQ&A

  • 全角カタカナチェックについて

    現在Perlを使ってpostから受け取ったデータを全角のカタカナかどうかをチェックさせるスクリプトを書いていますがいろいろしらべていますがどうもやはりうまくいきません。 文字コードは今後のことを考えてutf-8です。 以下のようにこころみたのですがやはりうまくチェックできたいないようです。 $var =~ /[^(ア|ァ|イ|ィ|ウ|ゥ|エ|ェ|オ|ォ|ー|カ|ガ|キ|ギ|ク|グ|ケ|ゲ|コ|ゴ|サ|ザ|シ|ジ|ス|ズ|セ|ゼ|ソ|ゾ|タ|ダ|チ|ヂ|ツ|ヅ|ッ|テ|デ|ト|ド|ナ|ニ|ヌ|ネ|ノ|ハ|バ|パ|ヒ|ビ|ピ|フ|ブ|プ|ヘ|ベ|ペ|ホ|ボ|ポ|マ|ミ|ム|メ|モ|ヤ|ャ|ユ|ュ|ヨ|ョ|ラ|リ|ル|レ|ロ|ワ|ヲ|ン|-| | )]/ どうにか上のような正規表現をつかってチェックできないでしょうか? ご教授よろしくお願いします。

    • 締切済み
    • CGI
  • Ruby1.9で全角文字を半角文字にうまく変換できません。

    Ruby1.9で全角文字を半角文字にうまく変換できません。 英数字までは以下のロジックでうまく出来たのですが、カナが正しく変換されません。 何か良い知恵をどうかご教示のほどお願いいたします。 ※★→←★の間の文字は半角カナです(ブラウザ上全角カナとなってしまうため、便宜上補足しました)。 moji = "イあ1Aa" moji.tr('a-zA-Z0-9ア-ン', 'a-zA-Z0-9★→ア-ン←★') 結果:★→ウ←★あ1Aa 何故か半角のイではなく半角のウとなってしまう。    ※アの場合のみ正しく半角のアに変換される。

    • ベストアンサー
    • Ruby
  • 英語での発声練習

    日本の演劇部などでは”ア~エ~イ~ウ~エ~オ~ア~オ~”などと大声で発声練習をしますが、英語では どのようなものがあるのでしょうか?

  • 配列のメソッド

    配列のメソッドをセッターしてゲッターで取得したいのですがどのようにすればいいのかわかりません(--;)セッターをまず作成しましたがエラーになって出来ません・・・どなたかお願いします。 ↓以下セッターです。 public class KanaHenkanData {   //全角を格納するメソッド   public char[] setZenkaraHan(char[] haze) {     //(全角)ア、イ、ウ、エ、オ・・・・     char[] zenkaku = {'ア','イ','ウ','エ','オ'};          //zenkakuを返す     return zenkaku;   }   //半角を格納するメソッド   public void setHankaraZen(int a,String[] zeha) {     //(半角)ア、イ、ウ、エ、オ・・・・     String[] hankaku = {"ア","イ","ウ","エ","オ};     //hankakuを返す     return hankaku;   } }

    • ベストアンサー
    • Java
  • 平方根

    こんばんは。 質問があります。よろしくお願いいたします。 (1)nを自然数とするとき、次の式を簡単にせよ。 {(7+4√3)^n+(7-4√3)^n}^2-{(7+4√3)^n-(7-4√39^n}^2 答えは4になるそうなのですが、まずどこから手をつけたらよいのかわかりません。 (2)P=|3-x|-|x+2|について、次の( )にあてはまる数を答えよ。 x=-3のときP=ア(),x=5のときP=イ()である。 また、ウ()≦x≦エ()のとき、P=オ()x+カ()であり、x<ウ()のときP=ア()、x>エ()のときP=イ()である。 アとイだけできましたが、後がよくわかりません。 答えがウ-2 エ3 オ-2 カ1 です、 数学が苦手なので詳しく教えてくださると幸いです。 よろしくお願いいたします。

  • Wordのアウトライン設定について

    下記のようなタイトルの、左の数字等が自動で出すようにするには、 どうすればいいですか? 第1 本州について 1 関東について   ア 東京について    (ア) 東京駅について    (イ) 新橋駅について  イ 神奈川について    (ア) 横浜駅について    (イ) 新横浜駅について 2 関西について :::::::::::::::: 上記の文で、自動的に 全角で、「第1・第2・第3・・・・・」 全角で、「1・2・3・4・・・・・」 全角で、「 ア・イ・ウ・エ・オ・・・・」 半角で、「(ア)(イ)・・・・」とでるようにしたいです ア・イ・ウ・・・・・は左から1文字空けて (ア)(イ)(ウ)・・・・・は左から2文字空けたいです 事前に登録する方法を教えて下さい 私が自分で設定しても、第1と出た後にエンターを押しても また、第1と出ます。何度、エンターを押しても第1としかでません 第1・第2・第3・・・・・・と全角で続けて自動で出るようにするにはどのようにすればいいですか 第1の後に、「見出し 1」としないといけないのですか?

  • Ruby言語にて、全角カナ⇔半角カナ変換がうまくいかずで困っております

    Ruby言語にて、全角カナ⇔半角カナ変換がうまくいかずで困っております。 以下のようにプログラミングをしてます。 結果が、思った通りではないのですが、何が原因でしょうか。 ※★→←★部分で囲んだ部分は半角文字です(ブラウザ上、半角文字が全角に変換されているようなので、  適宜そのような表記を入れました。 ●半角→全角変換 sss = "★→アイウエオ←★".tr('★→ア-ン←★', 'ア-ン') p sss ⇒★→アウオキケ←★ ●全角→半角 sss = "アイウエオ".tr('ア-ン', '★→ア-ン←★') p sss ⇒ア★→イ←★イ★→ウ←★ウ どうか原因を教えてください。

    • ベストアンサー
    • Ruby
  • 数I(グラフ)の問題です

    θ(0°≦θ≦180°)を定数とするxの2次関数 y = { x - (1 + cosθ) }^2 - 2cosθ+ sinθがあり、このグラフの頂点をA、y軸との交点をBとする。 (1)点Aとy軸に関して対称な点をPとすると、点Pのx座標は[1]である。次に、APを1辺とする正三角形Tを考えると、θ=60°のとき、Tの面積は[2]である。 また、Tの面積の最大値は[3]である。 (2)点Bのy座標をcとする。ここで、s=sinθとおき、cをsで表すと、c=[4]となることから、cの範囲は[5]である。 解答群 [1] ア「-1-cosθ」  イ「1-cosθ」   ウ「1+cosθ」 エ「-2cosθ+sinθ」 オ「2cosθ-sinθ」 [2] ア「{(7√3)/4}-3」 イ「√3/4」   ウ「3/4」  エ「(9√3)/4」  オ「{(7√3)/4}+3」 [3] ア「√3/4」  イ「(3√3)/4」   ウ「2√3」   エ「4√3」  オ「8」 [4] ア「-s^2+s+1」  イ「-s^2+s+2」   ウ「s^2+s」  エ「s^2+s+1」  オ「s^2+s+2」 [5] ア「c≦2」  イ「3/4≦c≦2」 ウ「1≦c≦2」 エ「2≦c≦7/4」  オ「2≦c≦9/4」 [1]はウ「1+cosθ」、[2]はエ「(9√3)/4」、[4]はイ「-s^2+s+2」とそれぞれ答えを出したのですが、残る[3][5]がわかりません。 どのようにして解くのでしょうか。 よろしくお願いします。

  • 展開を教えてください。

    (A+B)(A-B)=A^2-B^2を利用して202×198の答えを出す方法は202×198=(ア+イ)(ウ-エ)=200^2-オ^2=39996 ア、イ、ウ、エ、オに該当する数と計算方法を教えてください。

  • リットル・デシリットル・ミリリットルの計算方法教えて下さい

    ・かさの多い順に左から記号を書きます。  正しいのはどれでしょう。 ア16dl イ1300ml ウ1l7dl エ900ml  (1)ア→ウ→イ→エ  (2)ウ→ア→イ→エ  (3)ウ→イ→ア→エ  (4)エ→イ→ア→ウ ○1l=10dl 1l=1000ml というのを教科書で習ったのですがすべて同じ単位 にそろえる事ができないのですが,どうやって 教えたらいいのでしょう…? 親の私がなやんでしまって^^; すいません!教えてください。