アプリ版:「スタンプのみでお礼する」機能のリリースについて

あけましておめでとうございます。

早速ですが、皆様のお力を拝借したく。
WindowsXPSP2+ActivePerl5.6.1でJcode.pmを使用して、utf8へ変換しようとしました。
http://okwave.jp/qa2600582.html を参考にJcode.pmを導入し(とある事情でインストールしておりません)、以下のソースを記述しました。
ちなみに"sjis"で記述しております。

#!/usr/local/bin/perl
use lib "./lib";
use Jcode;
$buf = "てすてすてす";
print "BeforeCode=".Jcode::getcode($buf)."\n";
Jcode::convert( \$buf, "utf8");
#$j = Jcode->new($buf);
#$buf = $j->utf8;
print "$buf\n";
print "AfterCode=".Jcode::getcode($buf)."\n";
exit;

すると
BeforeCode=sjis
AfterCode=euc
と表示され、"utf8"を指定したにも関わらず、"euc"に変換されてしまいました。

次に、上記ソースの中ほどを
#Jcode::convert( \$buf, "utf8");
$j = Jcode->new($buf);
$buf = $j->utf8;
と書き換えてみました。すると、
BeforeCode=sjis
Undefined subroutine &Jcode::_Classic::euc_utf8 called at lib/Jcode/_Classic.pm line 255.
とエラーが出てしまいます。
見た感じeuc_utf8が存在しないと言われているようですが、Jcode\Unicode\NoXS.pmに存在しています。

環境に問題があるような気はしますが、どのようにすれば"utf8"への変換が成功するのでしょうか?ご教授いただければ幸いです。

ちなみに上記ソースで
Jcode::convert( \$buf, "jis");
Jcode::convert( \$buf, "euc");
Jcode::convert( \$buf, "sjis");
はすべて成功し、指定した文字コードに変換されました。
"utf8"への変換だけが失敗するという状況で、新年早々頭を抱えております。

A 回答 (2件)

Walrus,Digit. Perlメモ/日本語の扱い>Perl5.6とJcodeモジュール>Unicodeの変換。


――とかが参考になるかも。

http://digit.que.ne.jp/work/index.cgi?Perl%E3%83 …
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

ご投稿いただいた内容で無事解決することができました。ありがとうございました。
ちなみに参考URLの内容はJcode.pmの2.01版に関してでしたが、2.06版でもほぼ同様でした。

以下に、ソース変更箇所を記しておきます。
対象:Jcode::unicode::NoXS.pm
1.関数定義の変更
 sub Jcode::ucs2_euc{
 sub Jcode::euc_ucs2{
 sub Jcode::euc_utf8{
 sub Jcode::utf8_euc{
 sub Jcode::ucs2_utf8{
 sub Jcode::utf8_ucs2{
以上の関数定義の"Jcode::" -> "Jcode::_Classic::"に変更
2.sub Jcode::_Classic::euc_utf8内の処理
 &Jcode::euc_ucs2($r_str);
 &Jcode::ucs2_utf8($r_str);

 &Jcode::_Classic::euc_ucs2($r_str);
 &Jcode::_Classic::ucs2_utf8($r_str);
に変更
3.sub Jcode::_Classic::utf8_euc内の処理
 &Jcode::utf8_ucs2($r_str);
 &Jcode::ucs2_euc($r_str);

 &Jcode::_Classic::utf8_ucs2($r_str);
 &Jcode::_Classic::ucs2_euc($r_str);
に変更

以上の変更を施したところ、sjisの文字列$bufに対して
Jcode::convert( \$buf, "utf8");
もしくは
$j = Jcode->new($buf);
$buf = $j->utf8;
が正常に$bufをutf8に変換することを確認。またutf8->sjisの変換も確認できました。

お礼日時:2007/01/03 10:46

こんばんは。


NoXS.pmがあってもそれを見に行くようになっていないようです。

Jcode.pmの55行目付近に
use vars qw($USE_CACHE $NOXS);

$USE_CACHE = 1;
$NOXS = 0;

という行があるはずですので、$NOXS = 0 のほうを、0以外の値(1でいいと思います)に
変更してみてください。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
ただ残念なことにこの方法では現象が変わらず、解決に至りませんでした。
こちらでJcode.pmのバージョンを書き漏らしていたのも原因かと思われます。ちなみにバージョンは2.06を使用しております。

お礼日時:2007/01/03 10:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!