Tag Archives: I18N

How to set character set property to MQ message

前の仕事で、JavaとMQを使用してJMSを通じてメッセージをやり取りするときにメッセージキューのキャラクタセットを指定してもなぜか意図した通りにコード変換などが行われなくて、メッセージ自体にキャラクタセットを指定する方法がないかを探した挙句、下記のリンクに情報があるのをやっと見つけて何とか解決したことがありました。 MQのメッセージにキャラクターセットを指定する方法 最近になって、上記のようになったのは何か設定もしくは環境が変になっていたためらしく、通常はメッセージキューのキャラクタセットをきちんと指定していれば大丈夫らしいことが確認できたのですが、忘れないように一応メモがわりに記録しておきます。 キーワードは、JMS_IBM_Character_Setでした。

Posted in コンピュータ | Tagged , , , , , | Leave a comment

Perl 5.8 & I18N

最近、久々にPerlを使い、バージョン5.8を使ったのですが、昔のPerlと比べるとずい分と変わっているところも多く、文字列まわりでちょっと混乱し、ハマってしまったので、わかっている人には無駄な情報と思いますが、Perl 5.8の初心者の人等、それなりに役に立つこともあるかと思いまとめてみました。 例えば、下記のコードは、いわゆる日本語環境下では、何の問題もなく期待した通りに「日本語」という文字列が表示されます。 $string = “日本語”; print $string; で、普通はこれでいいように思うのですが、例えば、UTF-8でファイルに書き出したいと思って、下記のようなコードを実行し、作成されたtest.txtファイルを開いて見ると、見事に文字化けします。 open (OUT, “>:utf8”, “test.txt”) || die “Can’t open test.txt: $!\n”; $string = “日本語”; print $string; print OUT $string; close OUT; 私の場合、英語版のWindows XPで日本語ロケールを設定して使っているので、そのためにこういう問題が起きるのかと最初に思ってしまいました。特に、ほぼすべてのアプリケーションで日本語を表示できるようにするために、システムロケールは日本語にしてあるのですが、米国での使用を前提としたアプリケーションも同時に使うためにユーザロケールは英語(米国)に設定しているので、余計にそう思ったのですが、すべて日本語ロケールに設定しても、日本語版のWindows 2003で試しても同様の結果でしたので、Perl自体の実装の問題(というか仕様)であると思います。 この環境下でも上記の何の変哲もないコードは正常に実行され、「日本語」という文字列が表示されます。しかし、それはたまたまであって内部的には、実はガベージイン・ガベージアウトが行われているのです。Javaのようにソースコードファイルがどのエンコーディングかを指定できるようにするのが本来は筋なのだと思うのですが、Perlの場合は、そういう指定ができるのはutf8を使うかどうかという指定(use utf8を頭に書く)だけが存在し、将来はUTF-8で一本化する方針のため(use utf8もなくす)、シフトJIS等でソースを作成することは正式にはサポートしないという立場のようです。で、上記のようにシフトJISで保存したファイル内のリテラル文字は、適当なバイト列として内部的には扱われてしまうようで(UTF-8になっているわけでもない様子)、文字列に対する操作やコード変換を伴う入出力を行わない限りは、その事実に気付かないということになります。 この場合、主に2つの方法があります。一つ目は、use utf8を宣言して、ファイル自体をUTF-8で保存し、Perl外部との入出力には適切なエンコーディング情報を指定してあげる方法です。コードは、大体次のようになります。 use utf8; open … Continue reading

Posted in コンピュータ | Tagged , , , , , , , , , , , , , , , | Leave a comment

Windowsの英語版環境でASP.NETのサイト作成をする際の日本語に関する注意事項

Windows 2000でしかまだ試していないので2003やXPだと少し話しは違うかもしれないけど、きっと似たような話だと思う。 最近、ASP.NETを使った日本語Webアプリケーションを英語環境へ移す作業をやっていて、色々と気づいた点や再確認したことをメモ。 web.configというファイルの設定で、globalization要素の一つにfileEncodingというのがあるのだが、SDKの記述には、fileEncodingを指定しないときはどういう動作なのかははっきりと書いていない。Shift_JISで作成されたaspxファイルでfileEncodingを指定しないと、システムロケールを日本語にしても初期動作としてはANSI(iso-8859-1?)ファイルとして読み込んでしまうみたい。ところが同じ環境で、一度、fileEncodingをshift-jisで指定して、きちんと動作させた後、fileEncodingの指定を削除してしまうとどこかに記憶されているのだろうか、なぜかちゃんと動作する。この動きはいまいちよくわからない。 ところで、システムロケールについては、マイクロソフト のGlobal DevサイトのFAQ には、 The system locale (sometimes referred to as the system default locale), determines which ANSI, OEM and MAC codepages and associated bitmap font files are used as defaults for the system. These codepages … Continue reading

Posted in Uncategorized | Tagged , , , , | Leave a comment