飴屋ぷろじぇくと

 ちょっとカテゴリを分けてみようかなっと。

--.--.--[--] スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

2014.10.15[水] こんどはFreePascalを試してみる

Free Pascal Compiler(FPC)が何物かについてはこのへんを参照のこと。
http://ja.wikipedia.org/wiki/Free_Pascal
公式はこちら。
http://www.freepascal.org/
Win32版ダウンロード
http://sourceforge.net/projects/freepascal/files/Win32/

Lazarus
というFPCの統合開発環境プロジェクトがDelphiの移植みたいになっていて、というか最近のDelphiは知らないので、どのくらいDelphiなのかわかりませんが、なんかいい感じになってます。
Wikipedia
http://ja.wikipedia.org/wiki/Lazarus
Lazarus公式
http://www.lazarus.freepascal.org/

問題はユニコード対応がどうなっているか。
まず、言語レベル、つまりコンパイラは、
AnsiStringUTF8String
   二つは実質同じもの。通常のマルチバイト文字列を格納
WideString
   文字単位が二バイト文字に拡張された文字列。
   UTF16、いわゆるUNICODEを格納。
UnicodeString
   
WideStringと大体同じ。でも参照カウントを持っていて
   言語側で管理してくれるらしい
というわけで、一応対応しています。
文字コードの変換も代入でマルチバイト(UTF8やSJIS等)←→ワイド文字はやってくれたりくれなかったりいろいろ条件があるみたいです。(調査・検証中)

ではLazarusのコンポーネントライブラリはどうか。
テキストボックスで試してみた。
  

テキストボックス

・まずソースコードのコードページを指定。

unit Unit1;
{$CodePage UTF8}  { ←ここ }
{$mode objfpc}{$H+}

interface
{ 以下略 }

・まず愚直に設定してみる
インスペクタのイベントタグでOnCreateイベントを生成して……

procedure TForm1.FormCreate(Sender: TObject);
begin
  Edit1.Text:='你好世界';
end;

・結果
文字化けした
見事に文字化けしました。

・ユニコード、Lazarusで検索していろいろ調べた結果
 Delphiの記事の方が多く出てくるんだけど、どうやら今どきのDelphiとFreePascalのLazarusではユニコード対応の仕方が異なる様子。LazarusのライブラリはUTF8で対応なんだそうだ。

procedure TForm1.FormCreate(Sender: TObject);
begin
  Edit1.Text:=UTF8Encode('你好世界'); { ←こうする }
end;

コンパイル後の文字列リテラルはワイド文字列になるのに、コンポーネントのプロパティにはUTF8で渡さないといけないようです。

文字化け解消

というわけで、表示できました。

まだ検証すべき項目はありますがまあまあいい感触です。
Pascal言語に抵抗がなければ選択肢の一つに加えても良いかもしれません。

UTAUのことを言えば、元々がVBで、MacでObjective-Cで作り直して、この期に及んで今度はPascalとかどんな苦行だよって話ですが、まあ過去にDelphiのプロジェクトに関わったこともありますし、そもそも初めて手にしたコンパイラ言語がTurbo Pascalだったりするので言語自体に抵抗はないんですが……。

そういやFreePascalもLazarusもMacOSX版があったっけ。これはポイント高いかも。

でもFreeBASICもなかなか強力で捨てがたい。まあ好みの問題も入ってるんですが。
ともかく、もう少し検証してみることにします。

Comment






(編集・削除用)

Trackback

http://utau2009.blog114.fc2.com/tb.php/20-efd948b9

この記事にトラックバック(FC2Blog User)

Copyright © 飴屋/菖蒲

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。