iniファイル関連(unicode)No.05503
h-tom さん 10/04/01 23:52
 

h-tom です。

ネタ向けの話題です。

unicode関連の話で、現状、iniファイルアクセス関数、文は、unicodeに対応
していません。
マクロ自体が、UTF-16で書くことが可能になったことや、dllfuncw等の追加も
あり、iniファイル関連もunicode対応してくれると、ありがたいです。


で、API周りを調べてみたのですが、
・WritePrivateProfile〜/GetPrivateProfile〜のunicode用関数は、NT系のみ。
・既存のunicodeファイルに対しては、unicodeでアクセスできるが、それ以外
 はシステムロケール(CP932)でアクセスする。
 (unicode/ANSI用関数共に同じ動作だけど、おそらくNT系のみの動作?)
・iniファイルを新規作成する場合は、システムロケール(CP932)で作成する。
 (unicode/ANSI用関数共に)
ということがわかりました。

試しに、iniファイルをUTF-16LEで保存し、秀丸マクロのwriteinistr/getinistr
でアクセスしてみましたが、Shift_JIS範囲内の文字なら、読み書き共に問題ない
です。

ということで、Unicodeに対応するにしても、
・NT系限定
・Unicodeを扱う場合は、先にUnicodeでファイルを作成しておく必要がある。
あたりが、問題になりそうですね。

あとは、UTF-16-UTF-8の相互変換関数を追加して、UTF-8で書き込むくらいで
すかね?

[ ]
RE:05503 iniファイル関連(unicode)No.05505
秀丸担当 さん 10/04/02 10:55
 

>unicode関連の話で、現状、iniファイルアクセス関数、文は、unicodeに対応
>していません。
>マクロ自体が、UTF-16で書くことが可能になったことや、dllfuncw等の追加も
>あり、iniファイル関連もunicode対応してくれると、ありがたいです。

確かに現状ではUnicodeはできませんでした。
試してみたところ言われている通りの挙動のようで、あらかじめBOMのみのファ
イルを作っておくと大丈夫のようです。

Unicode版のこれら関数があったらあったで便利かもしれないので、ネタとして
参考にさせていただきます。

あと、文字列をUnicode16進数文字列に変換する関数があったら従来のiniファイ
ルでもできるので便利かもしれないです。
現状でもそういうサブルーチンを作っておくと回避できるかもしれません。


ちなみに、APIの仕様的には原則的にはANSIで、16bit版との互換のためだめにあ
るAPIなので、Unicodeができるこの仕様は確かなものか不明という心配もありま
す。

調べてみたら、フルパスでないファイル名だけ書いた場合はWindowsフォルダに
作られるという仕様がありましたが、64bit版ではVista以降、UACによって
Windowsフォルダには書き込みできないという非互換があることもわかりました。
(マクロヘルプにも追記しておきます)

[ ]