指向性メモ::2007-03-31::A#とVisualStudio2005による.NETプログラミング・日本語編

ページ情報
制作日
2007-03-31T10:53:30+09:00
最終更新日
2007-03-31T13:40:44+09:00
ページ内目次

MSSyst.String.adsをよく読んでみると、次の定義がある。

   function new_String(
      This : Ref := null;
      c : Wide_Character;
      count : Integer) return Ref;

+が定義されているのはString型だけなので、Wide文字列を変換する場合、どうやらこの方法しかないらしい。コードにすると次のような感じだ。

Mssyst.String.new_String(c => Wide_Character'('ほ'), count => 1)

コードはこれでよいとして、問題はコンパイラだ。ファイルがShift-JISなので、コンパイルオプションに-gnatWsを付けてコンパイルしてみたところ、依然文字化けする。pragma Wide_Character_Encodingなども試してみたが、どうもうまくいかない。仕方が無いのでファイルをUTF-8に変換し、コンパイラオプションを-gnatW8に変更してみたところ、なんとかうまく表示することができた。ShiftJISはもしかすると未実装なのかもしれない。

とりあえず、日本語は通るようになったが、これではさすがに面倒だ。要望として作者に伝えるべきなのか、それとも、他にもっと良い方法が存在するのか。うーん。

Comments

Name
YT
Datetime
2007-03-31T13:40:44+09:00
Message

こんにちは。

GNATフロントエンドは、-gnatWsを、ワイド文字列に「生のJISコード」として格納しやがります。-gnatWe(EUC-JP)も同じです。

理想的には、ソースの文字コード、バイナリ中のCharacterの文字コード、バイナリ中のWide_Characterの文字コードを全部個別に指定できるべきで、現実的にはソース=Character=環境のロケール、Wide_Characterは常にUTF-16とかでも充分なのですが、どうもAdaCoreの人はその辺まるでわかってない様子で……。

コンパイラのソースのscng.adbあたりを直して使うぐらいしか無いと思います。

Trackbacks

Trackback Ping URI

http://yudai.arielworks.com/memo/2007/03/31/105330.trackback

末尾に「0 + 1」の計算結果を繋げて下さい。例えば計算結果が「17」の場合、「105330.trackback17」です。これは機械的なトラックバックスパムを防止するための措置です。

Post a comment

Name (optional)
Email address or URI (optional)
Do the math below (required to filter comment spams)
0 + 1 + 2 =
Message (required)
Submit
連絡先、リンク、転載や複製などについては『サイト案内』をご覧ください。Powered by HIMMEL

I ♥ Validator