▼スレッド
│
└◇1773:EUCコード使用時の送信データ文字化けについて [矢神] 12/04 19:26
└◇1774:Re:EUCコード使用時の送信データ文字化けについて [moon] 12/05 00:25
└◇1776:Re[2]:EUCコード使用時の送信データ文字化けについて [矢神] 12/05 06:08
└◇1777:Re[3]:EUCコード使用時の送信データ文字化けについて [moon] 12/05 13:42
└◇1778:Re[4]:EUCコード使用時の送信データ文字化けについて [矢神] 12/05 16:24
└◇1779:Re[5]:EUCコード使用時の送信データ文字化けについて [moon] 12/05 18:47<-last
お久しぶりです。去年、幾度かお世話になりました矢神です。コメントを書く(引用) | スレッド一覧
最近SoSいじりを再開させたのですが、また一つ壁に当たってしまいましたので質問させて下さい。
原因がSoSにあるのかどうか判断できなく、質問が不適切でしたらすみません。
SoSではデフォルトでjcode.plを使用し、文字コードはsjisを使っていますが
エラーが激しいので、eucに変更しようと思いました。
sub decodeのsjisをeucにし、プログラム自体も全てEUCに変更する事でとりあえず上手く行ったかと思ったのですが、
フォーム等で送信されるデータに文字化けが起こってしまいます。
コードが違う時のように全部が文字化けする訳ではないのですが、
ひらがなの「あ」を続けて書くと一部が「う」に化けてしまったり、と言った感じに、
ほんの少しだけが化けてしまいます。
ローカルのApache上でも、レンタルサーバー上でも同じように文字化けが起こり、
Jcode.pmに変えてみても同様でした。
情報が少なすぎるかとも思いますが、これだけで思い当たる原因は何かありますでしょうか?
> お久しぶりです。去年、幾度かお世話になりました矢神です。コメントを書く(引用) | スレッド一覧
> 最近SoSいじりを再開させたのですが、また一つ壁に当たってしまいましたので質問させて下さい。
> 原因がSoSにあるのかどうか判断できなく、質問が不適切でしたらすみません。
>
> SoSではデフォルトでjcode.plを使用し、文字コードはsjisを使っていますが
> エラーが激しいので、eucに変更しようと思いました。
> sub decodeのsjisをeucにし、プログラム自体も全てEUCに変更する事でとりあえず上手く行ったかと思ったのですが、
> フォーム等で送信されるデータに文字化けが起こってしまいます。
> コードが違う時のように全部が文字化けする訳ではないのですが、
> ひらがなの「あ」を続けて書くと一部が「う」に化けてしまったり、と言った感じに、
> ほんの少しだけが化けてしまいます。
> ローカルのApache上でも、レンタルサーバー上でも同じように文字化けが起こり、
> Jcode.pmに変えてみても同様でした。
>
> 情報が少なすぎるかとも思いますが、これだけで思い当たる原因は何かありますでしょうか?
どうやらsub decodeの「$value =~ s/△/▲/g;」で変換されてしまうようです。(EUCの'あ'がA4A2で'△'がA2A4なので'あ'が連続するとマッチしてしまうため。)
1文字1文字変換するようにすれば解決しますがマルチバイトコードなので困難だと思います。
ですので、もしEUCのまま改善しようとするのであれば区切り文字を'△'ではなく1バイト文字にするのが良いのではないかと思います。
この場合、sub decodeで変換されている'"'などを使用するか、未変換の'@'などにして変換処理をsub decodeに追加するか、が必要になります。
ありがとうございます!コメントを書く(引用) | スレッド一覧
これだけの情報で一発で原因を解明して戴けるとは思いませんでした。
ご提案の通り、区切り用の文字を1バイト文字に変更しようと思いますが、混乱を避けるためなるべくPerlで使用されない文字を選んで使いたいと思います。
まだまだPerlは勉強中ですのでご意見を戴きたいのですが、
^ (アクサンシルコンフレクス)や
` (アクサン グラーブ)
ではどうでしょうか?
また、いっそ半角カナを用いた場合、何か問題があると思われますでしょうか?
まず最初に以下を訂正をします。コメントを書く(引用) | スレッド一覧
> 1文字1文字変換するようにすれば解決しますがマルチバイトコードなので困難だと思います。
よく考えてみたところこれだけでは解決しないです。
splitやindexを使用しているところも1文字1文字で行うようにしないと駄目でしたのでさらに困難ということになります。
> ありがとうございます!
> これだけの情報で一発で原因を解明して戴けるとは思いませんでした。
>
> ご提案の通り、区切り用の文字を1バイト文字に変更しようと思いますが、混乱を避けるためなるべくPerlで使用されない文字を選んで使いたいと思います。
> まだまだPerlは勉強中ですのでご意見を戴きたいのですが、
> ^ (アクサンシルコンフレクス)や
> ` (アクサン グラーブ)
> ではどうでしょうか?
> また、いっそ半角カナを用いた場合、何か問題があると思われますでしょうか?
'^'は正規表現において行頭を表す記号なので正規表現を使用する場合にエスケープする必要があり手間が増えるのでやめておいたほうが無難です。
'`'はPerlのスクリプトとしては意味がありますが正規表現には影響しないはずなので問題無いと思います。
半角カナは http://charset.7jp.net/euc.html を見た限り8e##であり8eは全角文字の下位バイトとしては使われていないようですのでおそらく問題無いだろうと思います。
ありがとうございます。コメントを書く(引用) | スレッド一覧
正規表現の事など最初に考えなければいけないのにすっかり抜けていました。お恥ずかしいです
今後また一括で検索変換する際に同記号が他に使用されていると面倒だと思いましたので、
とりあえず問題の少なそうな半角カナを使用してやってみようと思います。
教えて戴いたコード表が便利そうですので、今後活用させて戴こうと思います。
重ね重ね、ありがとうございました。
前作から随分とお世話になってしまい、moon様無くしては現在のゲームも稼動に漕ぎ着けられなかったと思います。
もしご迷惑でなければ、感謝を込めてスタッフ/クレジットのページにPROGRAM ADVISERとしてお名前を載せさせて戴いても宜しいでしょうか。
問題がありますようでしたらすぐに消させて戴きますので、お申し付け下さい。
> 前作から随分とお世話になってしまい、moon様無くしては現在のゲームも稼動に漕ぎ着けられなかったと思います。コメントを書く(引用) | スレッド一覧
> もしご迷惑でなければ、感謝を込めてスタッフ/クレジットのページにPROGRAM ADVISERとしてお名前を載せさせて戴いても宜しいでしょうか。
> 問題がありますようでしたらすぐに消させて戴きますので、お申し付け下さい。
ええ、迷惑ではないのでご自由にどうぞ。