• ベストアンサー

Perl/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コードの文字を表示させる方法は無いでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • nightowl
  • ベストアンサー率44% (490/1101)
回答No.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_unicode.html,http://www.toho-shoten.co.jp/site/0806.html#a_02
mottixi
質問者

お礼

非常に詳細なご回答をいただき有難うございます。 >ウィンドウのタイトルではなく、ラベルやテキストウィジェットではどうなのでしょう? これが駄目だったんです。。。  #というより、試した順としてはこちらが先でした。 WindowsXP環境も手に入れましたので、ちょっと、いただいた回答を参考に、地域と言語のオプション設定変更など、色々みます。  #仕事の都合上、すぐに試して結果を報告することができません。すみません。結果報告後、クローズ&ポイント発行させていただきますね。

その他の回答 (2)

  • Ethersky
  • ベストアンサー率71% (168/235)
回答No.2

んー? よくよく考えると中国語版のWindowsやLinuxとかはその地域で標準のコードで書いて表示できるのかなぁ・・・と試したいけど持ってないので無理です。 化けるのがOS側の問題ならまだわかるんですが・・・。(ホントにOSの問題なのかは私は知らないです(ぇ))

mottixi
質問者

お礼

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

  • Ethersky
  • ベストアンサー率71% (168/235)
回答No.1

私も試してみました。 するとUTF-8に限らずShift JIS以外では全部化けました。 調べてみたところ、どうやらWindowsならShift JIS、UNIXならEUCにしなければダメなようです。 今のところ、他のコードでの表示は不可能なようです。

mottixi
質問者

お礼

ご回答頂き有り難うございます。 また、調べていただき恐縮です。 個々数日の付け焼き刃のせいか、検索しても上手く回答が見つけられずにいたので、非常に有り難いです。 しかし…。わちゃー…Shift-JISかEUCしか選択肢はないのですね…。 んー、ということは、中国語や韓国語を表示しようと思ったら、WindowsやUNIX系OSの環境からして、その言語用にセットアップしないと駄目そうなのですね。。。

関連するQ&A

専門家に質問してみよう