プロが教える店舗&オフィスのセキュリティ対策術

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 回答 (3件)

こんにちは。

何だか気になるご質問だったのでお邪魔します。
私は目下 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 …
    • good
    • 0
この回答へのお礼

非常に詳細なご回答をいただき有難うございます。

>ウィンドウのタイトルではなく、ラベルやテキストウィジェットではどうなのでしょう?
これが駄目だったんです。。。
 #というより、試した順としてはこちらが先でした。

WindowsXP環境も手に入れましたので、ちょっと、いただいた回答を参考に、地域と言語のオプション設定変更など、色々みます。

 #仕事の都合上、すぐに試して結果を報告することができません。すみません。結果報告後、クローズ&ポイント発行させていただきますね。

お礼日時:2003/08/01 18:00

んー?


よくよく考えると中国語版のWindowsやLinuxとかはその地域で標準のコードで書いて表示できるのかなぁ・・・と試したいけど持ってないので無理です。

化けるのがOS側の問題ならまだわかるんですが・・・。(ホントにOSの問題なのかは私は知らないです(ぇ))
    • good
    • 0
この回答へのお礼

色々ありがとうございました。

お礼日時:2003/08/01 17:31

私も試してみました。


するとUTF-8に限らずShift JIS以外では全部化けました。

調べてみたところ、どうやらWindowsならShift JIS、UNIXならEUCにしなければダメなようです。
今のところ、他のコードでの表示は不可能なようです。
    • good
    • 0
この回答へのお礼

ご回答頂き有り難うございます。
また、調べていただき恐縮です。
個々数日の付け焼き刃のせいか、検索しても上手く回答が見つけられずにいたので、非常に有り難いです。

しかし…。わちゃー…Shift-JISかEUCしか選択肢はないのですね…。
んー、ということは、中国語や韓国語を表示しようと思ったら、WindowsやUNIX系OSの環境からして、その言語用にセットアップしないと駄目そうなのですね。。。

お礼日時:2003/07/18 10:46

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