正しく読み込めないiniファイルについてNo.08960
ohtorii さん 19/04/09 17:26
 
お疲れ様です。

getinistrw関数が、
iniファイルのコメント内容によってパラメータを読み込まないです。
ご確認いただきますようお願いいたします。


*問題の無いiniファイル(Unicode)
[property]
name=common
;あ


*問題のあるiniファイル(Unicode)
[property]
name=common
;継


【コードとiniファイル】
https://github.com/ohtorii/test/releases/tag/20190409_2


【環境】
window10 64bit
秀丸エディタ 8.88 64bit

[ ]
RE:08960 正しく読み込めないiniファイルNo.08963
h-tom さん 19/04/09 23:31
 

h-tom です。

>getinistrw関数が、
>iniファイルのコメント内容によってパラメータを読み込まないです。
面白い動きですね。
ok.ini は、UTF-16LE扱いされますが、ng.ini はShift_JIS扱いされてますね。
(writeinistrw で適当に書き込むと違いがわかります)

BOM付けておけば、両方とも確実にUTF-16LE扱いされますよ。

[ ]
RE:08963 正しく読み込めないiniファイルNo.08965
秀丸担当 さん 19/04/10 09:14
 

2つのファイルはBOMが無いようで、まずはBOMがあれば問題無いと思います。

Unicode版のINIファイルの読み書きは、新規に作るときにBOMの2バイト(FF,FE)を
書いている以外は、Windowsの処理そのままになっています。(GetPrivateProfileSt
ringWとWritePrivateProfileStringW)

Windowsとしてそういう動作になっているようで、仕様というか、Windowsの動作に従
うということになります。

判断基準は正確にはわかりませんが、BOMが無くても自動判断があって、ファイルを
スキャンして0x80のビットの有無で決まっているという気がします。

[ ]
RE:08965 正しく読み込めないiniファイルNo.08966
ohtorii さん 19/04/10 15:26
 
お疲れ様です

BOMを付けることで正しく動作するようになりました。
ありがとうございます(^o^)


今回、iniファイルにBOMを付けなかった理由は、
秀丸エディタマクロヘルプで以下のように書かれており、

> writeininumw文
> INIファイルが存在せず、新しく作られる場合はUnicode(UTF-16)のファイルとして
>作成されます。

Unicode(UTF-16)とあるので、BOM無しでも問題ないと私は判断しました。
もし、Unicode(UTF-16-BOM)と書かれていたら、私はBOMを付けていました。

ファイルパス区切り(\/)の件と合わせてドキュメント補足して頂けるとより分かりや
すくなると思いました。

[ ]
RE:08966 正しく読み込めないiniファイルNo.08967
秀丸担当 さん 19/04/10 16:59
 

ヘルプに書いあったらいいと思います。
あらかじめファイルを用意する場合はBOMが必要と追記させていただきます。

[ ]