OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
締切り
済み

s///eg変換で

  • 困ってます
  • 質問No.170147
  • 閲覧数122
  • ありがとう数5
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 77% (530/685)

# ↓OKWEBでは半角カナ表示できないけど、半角カナのつもり
@kptk = (
'ヴ', 'ー', 'ッ',
'ガ', 'ギ', 'グ', 'ゲ', 'ゴ',
'ァ', 'ィ', 'ゥ', 'ェ', 'ォ',
'ア', 'イ', 'ウ', 'エ', 'オ',
・・・
);
# ↓こちらは全部全角カナ
@kptv = (
'ヴ', 'ー', 'ッ',
'ガ', 'ギ', 'グ', 'ゲ', 'ゴ',
'ァ', 'ィ', 'ゥ', 'ェ', 'ォ',
'ア', 'イ', 'ウ', 'エ', 'オ',
・・・
);
for(my $n = 0; $n < @kptk; $n++){
$data =~ s/$kptk[$n]/$kptv[$n]/eg;
}

などとして、半角カナを全角に直したいのですが、どうも半角の小さい'ァ'だけがまともに変換されません。
その付近の文字やそれ以降すべての文字が文字化けします。
インターネットエクスプローラ5から呼び出しています。
サーバーはソラリス。
文字コードはEUCです。
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

回答 (全2件)

  • 回答No.1
レベル13

ベストアンサー率 37% (419/1115)

不具合の原因は解りかねますが、単純に半角から全角にしたいだけならばh2z_xxx(xxxは変換したい文字コード:jis、sjis、euc)という関数をコールすれば簡単に変換出来ますよ。 例えば、 &jcode'h2z_sjis(\$v); の様にすると、変数vに格納されている文字列中の半角カナを全て全角カナに変換することが出来ます。 お試し下さい。 注)jcode. ...続きを読む
不具合の原因は解りかねますが、単純に半角から全角にしたいだけならばh2z_xxx(xxxは変換したい文字コード:jis、sjis、euc)という関数をコールすれば簡単に変換出来ますよ。
例えば、

&jcode'h2z_sjis(\$v);

の様にすると、変数vに格納されている文字列中の半角カナを全て全角カナに変換することが出来ます。
お試し下さい。

注)jcode.plが使用可能になっている必要があります。

#ちなみにh2zとは「半角to全角」の略称と思われます。
#逆の機能を持つものとして、z2h_xxxもあります。
補足コメント
haporun

お礼率 77% (530/685)

配布したいので、できればjcode.plが使えるかどうかの環境を選びたくないのです。
小さい半角のァには、EUCでも困るようなエスケープシークエンスが入っているんでしょうか。
投稿日時 - 2001-11-17 16:48:54
お礼コメント
haporun

お礼率 77% (530/685)

どうやら、2バイト文字の2バイト目と1バイト目とマッチしてしまう関係で、小さいァだけが変な変換をされていたようです。
なんとか解決しました。
ありがとうございました。
投稿日時 - 2001-12-03 09:21:44
  • 回答No.2
レベル7

ベストアンサー率 77% (7/9)

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

お礼率 77% (530/685)

返事が遅くなってすみません。
対象となっているのは大きな半角アではなく、"ファイル" とかの小さな半角ァです。

ちなみに、この方法では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文字とマッチさせるようにして、変換すべきなら変換するようにしてます。
でもなんか動作が変です。
個のアルゴリズムは間違っているのでしょうか。
投稿日時 - 2001-11-22 13:36:15
お礼コメント
haporun

お礼率 77% (530/685)

どうやら、2バイト文字の2バイト目と1バイト目とマッチしてしまう関係で、小さいァだけが変な変換をされていたようです。
なんとか解決しました。
ありがとうございました。
投稿日時 - 2001-12-03 09:21:29
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ