UTF-8のソースコードに文字列定数を書いたらそのままUTF-8になったお話
program test; uses Windows; begin WriteLn(lstrlenW('あ')); { 3 } end.
と書いたら3が返ってきて、びっくりですよ。
ソースコードがUTF-8だからUTF-8で定数が保存されたのでしょうか。
program test; uses Windows; begin WriteLn(lstrlenW(#$3042)); { 1 } end.
でちゃんと1が返ってきました。
追記:
ソースコードが、じゃなくてそもそも内部ではUTF-8を使ってるんでした。
多分それのせいかと。なので文字列定数に対してUTF8Decodeとか使えばUTF-16として戻ってくるはず。
追記2:
program test; {$MODE OBJFPC} uses Windows; var s: WideString; begin s := UTF8Decode('あ'); Writeln(lstrlenW(s)); { 1 } end.
うーむ……