perl, v5.8.6で、Perl/Tkを利用した環境です。

従来は、Windows-XP(x32)で利用していて、特に問題なかったのですが、
同じ環境をWindows7(x32)に導入して利用しようとしたところ、
Menu メソッド呼び出しのところで、ちょうど Devel::peekのdumpで表示させた
ような内容のものが、DOSプロンプト上に出てしまいます。

↓こちらの記事(英文)に書かれていることも試してみましたが、解決できませんでした。
http://community.activestate.com/forum-topic/per …

Windows7だからということではなさそうですが、
この表示が出てしまう原因、出さなくする方法について、教えてください。
何かご存知の方、よろしくお願い致します。

サンプルスクリプト: test.pl
-----------------------------
use strict;
use Tk;
my $mw = MainWindow->new();
my $menu = $mw->Menu();
MainLoop;
-----------------------------

このスクリプトをWindows7環境上で実行すると、
MainWindowのダイアログは画面に正しく表示されていますが、
DOSプロンプトで、下記のメッセージも出てしまいます。
⇒4行目(my $menu = $mw->Menu();)をコメントアウトするとこの表示は出ません。

-----------------------------
C:\Perl\Tk\Win7>test.pl
@ 535 not utf8
SV = PV(0x3d4f9d0) at 0x3d53870
REFCNT = 2
FLAGS = (POK,pPOK,UTF8)
PV = 0x3d0d9e4 "\203\201\203C\203\212\203I 9"\0 [UTF8 "\x{c1}C\x{c3}C\x{ca}\x{283}\x{c9}I 9"]
CUR = 10
LEN = 11
SV = PVMG(0x214bf74) at 0x3d53870
REFCNT = 2
FLAGS = (SMG,POK,pPOK,UTF8)
IV = 0
NV = 0
PV = 0x3d0d9e4 "\203\201\203C\203\212\203I 9"\0 [UTF8 "\x{c1}C\x{c3}C\x{ca}\x{283}\x{c9}I 9"]
CUR = 10
LEN = 11
MAGIC = 0x3d5d5a4
MG_VIRTUAL = &PL_vtbl_utf8
MG_TYPE = PERL_MAGIC_utf8(w)
MG_LEN = 10

このQ&Aに関連する最新のQ&A

A 回答 (1件)

5.10から Tk ではなく Tkx というモジュールが添付されるようになっているのですが、


それの場合質問にあるような警告は出ないようです。
ただし、スクリプトを手直しする必要があります。

あるいは、Windows7の設定でメニューで使用するフォントをxpと同じ
MS UI Gothic にしてもでないようになるかもしれません。
現状ではメイリオを使うようになっていると思います。

Windows フォントを変更する
http://windows.microsoft.com/ja-JP/windows7/Chan …

この手順でウィンドウの色とメトリックの変更画面まで行って、
「メニュー」のフォントを切り替えてみてください。

この回答への補足

sakusaker7 さん
ご回答ありがとうございます。拝見いたしました。
今、GWの休暇に入ってしまい、少しお時間いただきますが、
ご指定の内容のうち、フォント変更の方法を試してみようと思います。
結果が分かり次第、ご回答としてあらためてご報告させて頂きます。
ありがとうございました。

補足日時:2011/04/29 12:10
    • good
    • 0
この回答へのお礼

sakusaker7 さん
できました!ありがとうございました。

コントロールパネルの「ウィンドウの色とデザイン」で、
指定する部分(I):を「メニュー」
フォント(F):を「MS UI Gothic」にすると問題のダンプは出なくなりました。

さらに、別の方に教えて頂いたのですが、
もともとの
PV = 0x3d0d9e4 "\203\201\203C\203\212\203I 9"\0 [UTF8 "\x{c1}C\x{c3}C\x{ca}\x{283}\x{c9}I 9"]
の部分の文字コードを次のようにprintすると・・・

>perl -e "print \"\203\201\203C\203\212\203I 9\""
メイリオ 9

と出ていたようです。


それで、次は、メイリオのままにしておいて、
ダンプが出なくなる方法について興味が湧くところではあります。

'perl' 'meiryo'とかで検索してみて、次のようなページを見つけました。
http://magicant.txt-nifty.com/main/2010/08/windo …
こちらを参考にしてみようと思います。
(でも、perl 5.8. ではそもそも無理なのかも知れませんね)

とにかく、次のヒントとなるキーワードにもたどり着けるようになれました。
重ね重ね、ご回答ありがとうございました。

お礼日時:2011/05/10 21:16

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QUTF-8とEUCの違いに詳しい方、フォームでの半角英数の見た目を同じ

UTF-8とEUCの違いに詳しい方、フォームでの半角英数の見た目を同じにするには?


添付の画像を見て頂ければお分かりの通り

UTF-8とEUCだとフォーム内に入力された半角英数の表示が違いますよね。

UTFの方はちょっとボケてて横伸びしてる感じがします。

EUCの方はクッキリ鮮明です。

教えてgooもUTF-8を使ってますね。
英語を打つとちょいピンボケになります。
(PCやブラウザによるかもですけど)

ソースコードはUTF-8になっています。

DBとかの絡みや他のインクルードしているソースコードとの兼ね合いを考えると
ソースコードの文字コード変更はリスクが高いのでしたくないです。

UTF-8のまま、EUCのようにフォーム内の半角英数をクッキリ鮮明に表示する方法がありましたらご教授願います。

CSSでフォント指定をしてみましたが、変化無しでした。

シェアの多いWindowsXp~7、IE6~8辺りを出来るだけカバーできればOKです。

宜しくお願い致します。

Aベストアンサー

IEとUTF-8の組み合わせは色々ありますからね。。。

CSSのフォント指定をどうやっているかは分からないですけど、
 font-family: Verdana, 'MS Pゴシック', sans-serif;
にしてみてください。

Qperl/tkとtcl/tkの違いを知りたい

perl/tkとtcl/tkの違いを知りたい。
例えば、文法の違いだとか、互換性だとか、拡張性とかを
知りたい。宜しくお願いします。

Aベストアンサー

tkというのは、GUIのライブラリで、
それを、perlとかtclとかいった言語から使えるようにしたのが、perl/tk、tcl/tkです。

perlとtclは、全く違う言語ですから、文法は全く違いますし、互換性は全くありません。
ただ、tkという同じGUIライブラリを使用しているので、ライブラリの呼び出し方などはほぼ同じです。

QEUC シフト、JIS、 Unicode UTF-8の違いについて教えてください。

EUC シフト、JIS、 Unicode UTF-8の違いについて教えてください。

日本のみでサイトをつくる場合、どちらが適応しているのでしょうか?
SEO対策など含めて知りたいのですが、お詳しい方のアドバイスが頂けませんでしょうか

EUC シフト、JIS、 Unicode UTF-8、どちらでも作っているところがあり、イマイチ、どちらが良いか判断できません。

勉強不足での質問で恐縮ですが・・・ソフトは、Dreamweaverです。よろしくお願いします。

Aベストアンサー

基本はANo.2様のご回答の通りかと思います。
人それぞれ考え方はあるかと思いますが、制作する際にどの文字コードを選択するかという事を特定の端末を意識するという目的では使い分けてはおりません。どの様な手段で(X)HTMLを生成するかという事の方を重要視しています。

なので、

> Windows XP/Vistaユーザの両方を意識いた場合は、シフトJISの方がよ言うのでしょうか?

いいえ。EUC-JPでも、UTF-8でも全く支障はありません。現にその環境でこれらの文字コードで作成したものは問題なく閲覧できています。

> DreamWeaverの場合、utf-8になってしまうのですが、どちらが良いのでしょうか?

Dreamweaverでも任意の文字コードは勿論選べますよ。ディフォルトがUTF-8になっているだけでしょう。ですから静的なHTMLだけ作成するならお好みでどうぞ。
それぞれの文字コードの詳細についてはググるなどして把握されておくことをお奨めしますが、UTF-8は元々多言語による記述を想定していますので、多言語対応のサイトを作る時などにテンプレートをそのまま使えるというメリットがあったりします。また、近年はHTMLではなくXHTMLでの作成も多く、その場合はDOCTYPEの前、文書の先頭でXML宣言の記述をしなければならないのですが、このXML宣言が置かれる事でIEは互換モードに切り替わってしまう(詳しくは「DOCTYPEスイッチ」というキーワードでググってみて下さい)バグがある為、ボックス・モデルの計算方法の点などで他のモダン・ブラウザと解釈が違いが出てしまうなど、やっかいな事になります。しかし、文字コードをUTF-8にする場合はXML宣言を省略してもよいという仕様になっているので、その点でも逃げ道があるという意味で使い勝手がよいのかもしれません。

基本はANo.2様のご回答の通りかと思います。
人それぞれ考え方はあるかと思いますが、制作する際にどの文字コードを選択するかという事を特定の端末を意識するという目的では使い分けてはおりません。どの様な手段で(X)HTMLを生成するかという事の方を重要視しています。

なので、

> Windows XP/Vistaユーザの両方を意識いた場合は、シフトJISの方がよ言うのでしょうか?

いいえ。EUC-JPでも、UTF-8でも全く支障はありません。現にその環境でこれらの文字コードで作成したものは問題なく閲覧できていま...続きを読む

Qperlの1行目が#!/usr/bin/perlだと動かず#!/usr

perlの1行目が#!/usr/bin/perlだと動かず#!/usr/bin/perl5.8.9だと動くのですが、
#!/usr/bin/perlで動くようにするにはどうしたらいいのでしょうか?

インストールされているperlは
This is perl, v5.8.9 built for darwin-2level
です。

どこかでパスの設定をしてやればいいと思うのですが、
どこに何を書けばいいのかよくわかりません。

環境はMacOsX v10.6 SnowLeopardです。
どなたかよろしくお願いいたします。

Aベストアンサー

MacOSのことはよくわかりませんが、一般的なUNIX系OSで考えると、、

シンボリックリンク/usr/bin/perlを作り、/usr/bin/perl5.8.9にリンクすればいいでしょう。
ln -s /usr/bin/perl5.8.9 /usr/bin/perl

そうすればPerlスクリプトは「#!/usr/bin/perl」のままでOKです。

QEUC-JP版とUTF-8版の違い

ブログのsbを利用しようと思っています。
ダウンロードファイルにEUC-JP版 UTF-8版の2種類あるのですが、
違いがわからずどちらをDLしたらよいのか、困っております。
どなたか教えていただけるとありがたいです!

Aベストアンサー

結論として、サーバーが対応しているなら、UTF-8にするのが無難でしょう。

EUC-JP
UNIX系では古くから使われてきた文字コードです日本語1文字が2バイト

UTF-8
日本語1文字が主に3バイト

これにより、データ量としては、UTF-8はEUC-JPの1.5倍くらいになります。

ただし、データ互換方式としてはUTF-8の方が優れていて、普及もされています。
例えばトラックバックなどもUTF-8を標準としているものが多く、EUC-JPの場合、UTF-8への変換作業が必要となります。(SBが勝手にやってますが)
UTF-8であれば、このような問題は無いので、トラブルも少ないはず。
ただし、パソコンでUTF-8のファイルをいじるときは対応したテキストエディタが必要になりますので、フリーウェアで確認してインストールしておくといいでしょう。

QWindowsでperl/tkに挑戦

windows 98SE 上で perl/tk を使って GUI プログラミングに挑戦!と思ったのですが、
MainWindow が出る前に、必ず DOS窓が一瞬現れて消えるのが、どうも気になります。

この DOS窓を出さない方法はあるのでしょうか?
よろしくお願いします。

Aベストアンサー

perl.exeではなくwperl.exeがスクリプトを実行するように仕込んでおけば、コマンドプロンプトを表示せずに起動するようになります。

例えばWindows + ActivePerlでは通常は拡張子*.plをperl.exeで起動するように設定していると思いますので拡張子*.wplとかをwperl.exeで起動するように設定しておけばコマンドプロンプト無しで処理されます。

参考URL:http://www.mail-archive.com/activeperl@listserv.activestate.com/msg06024.html

Q保存形式としてのUnicode、UTF-8

「Unicode、UTF-8 違い」などでネットを検索すると
Unicode・・・文字コード
UTF-8・・・符号化方式
とのことで、同次元のものではないとのこと。

しかし、
さくらエディタ、TeraPadなどのテキストエディタの保存形式に
Unicode、UTF-8などがあるのですが、この違いは何でしょうか?



前提として、iPhone/iPadにてテキストファイルを扱おうとすると
Gmailの添付ファイル、Dropboxなどで文字化けする(デコードできない)ので
どちらかの形式に統一しようと思ったのですが、
あとあと困るといやなので、正確に理解したいと思った次第です。

どうぞよろしくお願いします。

Aベストアンサー

おそらく、Unicode=UTF-16だと思います。
そのエディタの保存形式の表記としてUnicode、UTF-8としているだけでしょう。
Windowsのメモ帳の文字コードがUnicodeとUTF-8となっていますからそれに合わせたのではないでしょうか。

QPerl/Tk Entry に対して見出しを付けたい

Win-XP,Active-Perl(v5.8.6)利用です。

複数のインプットボックスを持つ、
┌────────────┐
│   ┌───────┐│
│品名:│       ││
│   └───────┘│
│   ┌───────┐│
│科目:│       ││
│   └───────┘│
│   ┌───────┐│
│価格:│       ││
│   └───────┘│
│ ┌──┐┌─────┐│
│ │OK││キャンセル││
│ └──┘└─────┘│
└────────────┘
こんな感じのウィンドウを作りたいのですが、
(図が崩れているかも知れませんが大体のイメージで・・・)
========================================
use Tk;
$top = new MainWindow;
$arg[0] = $top->Entry(-title=>'品名:')->pack;
$arg[1] = $top->Entry(-title=>'科目:')->pack;
$arg[2] = $top->Entry(-title=>'価格:')->pack;
$b[0] = $top->Button(-text=>'OK',-command=> [\&exec,\@arg])->pack;
$b[1] = $top->Button(-text=>'キャンセル',-command=> [\&exec,(-1)])-pack;
========================================
unknown option "-title" at C:\Perl\site\lib/Tk/Widget.pm
Entryに対するオプションが分かりませんでした。

もしくは、Label や Message を組み合わせて実現するものでしょうか。
あと、実際に図のような配置でフォームを作りたい場合、
Buttonの部分の書き方はどのようにすれば良いですか?

以上、ご存知の方、ご教示よろしくお願い致します。

Win-XP,Active-Perl(v5.8.6)利用です。

複数のインプットボックスを持つ、
┌────────────┐
│   ┌───────┐│
│品名:│       ││
│   └───────┘│
│   ┌───────┐│
│科目:│       ││
│   └───────┘│
│   ┌───────┐│
│価格:│       ││
│   └───────┘│
│ ┌──┐┌─────┐│
│ │OK││キャンセル││
│ └──┘└─────┘│
└────────────┘
こんな感じのウィンドウを作りたいのですが、
(図が崩れているかも知れませんが大体のイメージで・・・)
===================...続きを読む

Aベストアンサー

use strict;
use warnings;
use Tk;

### Main Window
my $window = MainWindow->new();

### Frame
# Goods
my $goods_frame = $window->Frame(
-width => 240,
-height => 30,
-borderwidth => 2,
-relief => 'flat',
);
$goods_frame->pack();

# Price
my $price_frame = $window->Frame(
-width => 240,
-height => 30,
-borderwidth => 2,
-relief => 'flat',
);
$price_frame->pack();

# Confirm
my $confirm_frame = $window->Frame(
-width => 240,
-height => 30,
-borderwidth => 2,
-relief => 'flat',
);
$confirm_frame->pack();

### Widgets
# Goods Label
my $goods_label = $goods_frame->Label(
-text => 'Goods',
-width => 10
);
$goods_label->pack( -side => 'left' );

# Goods Entry
my $goods_entry = $goods_frame->Entry(
-width => 30,
-background => 'white'
);
$goods_entry->pack( -side => 'left' );

# Price Label
my $price_label = $price_frame->Label(
-text => 'Price',
-width => 10
);
$price_label->pack( -side => 'left' );

# Price Entry
my $price_entry = $price_frame->Entry(
-width => 30,
-background => 'white'
);
$price_entry->pack( -side => 'left' );

# OK Button
my $ok_button = $confirm_frame->Button( -text => 'OK', -width => 8 );
$ok_button->pack( -side => 'left' );

# Cancel Button
my $cancel_button = $confirm_frame->Button(
-text => 'Cancel',
-width => 8,
);
$cancel_button->pack( -side => 'left' );

### Loop
MainLoop();

use strict;
use warnings;
use Tk;

### Main Window
my $window = MainWindow->new();

### Frame
# Goods
my $goods_frame = $window->Frame(
-width => 240,
-height => 30,
-borderwidth => 2,
-relief => 'flat',
);
$goods_frame->pack();

# Price
my $price_frame = $window->Frame(
-width => 240,
-height => 30,
-borderwidth => 2,
-relief => 'flat',
);
$price_frame->pack();

# Confirm
my $confir...続きを読む

QMFCのコントロールにUTF-8の文字を表示したい

MFCのコントロールにUTF-8の文字を表示したい

表題の件ですが、VisualStudio2008において、UTF-8+BOMフォーマットで保存したソースコードにBOMつきUTF-8を入力する方法と、UTF-8文字列をMFCのコントロール(リストコントロールなど)に表示する方法がわかりません。
どなたかご教授いただける方が居られましたら幸いです。

Aベストアンサー

とりあえず、受信している文字列はちゃんとBOMつきUTF-8の文字列になっていますか?

ちなみにこんなコードではうまく変換出来ているようです。

#include <windows.h>
#include <string>

std::wstring ConvUTF8toUni(std::string utf8str) // BOMをとるため非const
{
std::wstring unistr;

// BOM とり
if (utf8str.length() > 3)
{
if ((unsigned char)utf8str[0] == 0xEF &&
(unsigned char)utf8str[1] == 0xBB &&
(unsigned char)utf8str[2] == 0xBF) {
utf8str.erase(0, 3);
}
}

int len = ::MultiByteToWideChar(CP_UTF8, 0, utf8str.c_str(), -1, NULL, 0);
if (len > 0)
{
unistr.resize(len);
::MultiByteToWideChar(CP_UTF8, 0, utf8str.c_str(), -1, &unistr[0], len);
}
return unistr;
}

int main()
{
unsigned char utf8[] =
{
0xEF, 0xBB, 0xBF,// BOM
0xE3, 0x81, 0x82,// あ
0xE3, 0x81, 0x84,// い
0xE3, 0x81, 0x86,// う
0xE3, 0x81, 0x88,// え
0xE3, 0x81, 0x8A,// お
};

std::string utf8str((char*)utf8, _countof(utf8));
std::wstring unistr = ConvUTF8toUni(utf8str);

return 0;
}

とりあえず、受信している文字列はちゃんとBOMつきUTF-8の文字列になっていますか?

ちなみにこんなコードではうまく変換出来ているようです。

#include <windows.h>
#include <string>

std::wstring ConvUTF8toUni(std::string utf8str) // BOMをとるため非const
{
std::wstring unistr;

// BOM とり
if (utf8str.length() > 3)
{
if ((unsigned char)utf8str[0] == 0xEF &&
(unsigned char)utf8str[1] == 0xBB &&
(unsigned char)utf8str[2] == 0xBF) {
utf8str.erase(0, 3);
}
}

int len = ::MultiByteT...続きを読む

QPerl/Tk使用時のUTF-8コード文字の表示

Windows98SE上でActivePerl5.8.0使用です。
 #Perlはここ数年愛用していますが、Tkは数日手をつけただけの初心者です

例えば、
 print OUT "☆ Hi! ★\n" ; #☆★はUTF-8
のようにファイルにUTF-8コードで書き出すことは可能ですが、
Tkを用いてWindowにUTF-8コードの文字を表示させようとすると失敗します。
例えば、Windowのタイトルを
 $top -> title('☆test1★') ; #☆★はUTF-8
とすると、表示は「笘・est1笘・」と文字化けしてしまいます。

Perl/Tkで作成したWindow上でUTF-8コードの文字を表示させる方法は無いでしょうか?

Aベストアンサー

こんにちは。何だか気になるご質問だったのでお邪魔します。
私は目下 Turbolinux 8 Workstation 上の Tcl/Tk 8.3 しか試せる環境にないので、
ひょっとしたらとんでもなく的外れなことを言ってるかもしれませんが、
ご笑覧ください。

ウィンドウのタイトルではなく、ラベルやテキストウィジェットではどうなのでしょう?
ウィンドウタイトル文字列は OS・GUI システム依存の最たるものですので、
他のウィジェットとは同列に扱えないと思います。

>よくよく考えると中国語版のWindowsやLinuxとかはその地域で標準のコードで書いて
>表示できるのかなぁ
これは当然できると思います。というより、できなければ困るでしょうね。
現に日本語化もされていますし、そうでなければアジアで Tcl/Tk を使う人も
いなかったでしょうから。

現在の Tcl/Tk は内部ですでにユニコードを使っています。
ユニコードフォントがなければもちろん文字化けしますが、
それでも Tcl 言語では UTF -8 も含めた各種エンコーディングの
相互変換をサポートしています。

日本語版 Linux の Tcl/Tk においても、ロカール(locale)を適切に設定したり
文字列のエンコードを変換してやれば中国語や韓国語の表示は可能です。

例えば、次のようにシェルスクリプトを書いてやれば、ラベルに韓国語が表示されます。

#!/bin/sh
# the next line restarts using wish \
LC_ALL=ko_KR.eucKR exec /usr/bin/wish8.3 "$0" "$@"
# wish の絶対パスは環境によって変わります
label .l -text "この部分は韓国語(EUC-KR)文字列"
pack .l

スクリプトの中から起動する wish に環境変数でロカールを与えてやるのがミソです。
Tcl の encoding コマンドでは韓国で一般的な ksc5601 や中国本土の gb1988、
台湾の big5 も扱えます。
また、文字列を UTF-8 エンコーディングで書いたならば以下のようになります。

#!/bin/sh
# the next line restarts using wish \
LC_ALL=korean.euc exec /usr/bin/wish8.3 "$0" "$@"
# なぜか ko_KR.eucKR ではダメでした
label .l -text [encoding convertfrom utf-8 "この部分は韓国語(UTF-8)文字列"]
pack .l

プラットフォームが Windows 上の Perl/Tk ということなので、そのままでは通じませんが
(というより、Windows98 にロカールってあったっけ?「地域のプロパティ」かな?)
考え方は同じでいいのではないでしょうか。

>中国語や韓国語を表示しようと思ったら、WindowsやUNIX系OSの環境からして、
>その言語用にセットアップしないと駄目そうなのですね
そのようですね。XP とかならいざ知らず、98SE ではユニコード対応も
いまいちでしょうから。
http://www.ctcs.jp/gongju/help/HowToUse.html

Perl の場合、特殊変数「$^O」に OS 名が入っていますので、
それによって分岐させてやればいいと思います。
外部のカタログファイルに言語ごとの翻訳文字列を収めておいて、
それを読み込ませるのもいいかもしれません。

現在の Perl の文字エンコーディング変換についてはほとんど知りませんので、
参考 URL をご覧ください。

参考URL:http://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html,http://www.toho-shoten.co.jp/site/0806.html#a_02

こんにちは。何だか気になるご質問だったのでお邪魔します。
私は目下 Turbolinux 8 Workstation 上の Tcl/Tk 8.3 しか試せる環境にないので、
ひょっとしたらとんでもなく的外れなことを言ってるかもしれませんが、
ご笑覧ください。

ウィンドウのタイトルではなく、ラベルやテキストウィジェットではどうなのでしょう?
ウィンドウタイトル文字列は OS・GUI システム依存の最たるものですので、
他のウィジェットとは同列に扱えないと思います。

>よくよく考えると中国語版のWindowsやLinuxとかはそ...続きを読む


人気Q&Aランキング

おすすめ情報