tagsファイルの文字コードについてNo.41085
fzok4234 さん 24/03/12 12:17
 
毎度お世話になっております。Fzok4234 です。


さて、「tagsファイルの作成」コマンドで作成される tags ファイルについてですが、
このファイルの文字コードは「UTF-8、BOM 無し、CRLF」でよろしいでしょうか?

この tags ファイルを当方の設定で秀丸エディタで開いたところ、上記のように
認識されたのですが、これをこのまま .editorconfig や .gitattributes の設定に
記述してよいのか迷っています。

もしかして、実は「SHIFT-JIS、CRLF」だったということはあるのでしょうか?

もし仮に本当に SHIFT-JIS だった場合、Unicode 文字を含む場合はどうなるのでし
ょうか?


[ ]
RE:41085 tagsファイルの文字コードについNo.41086
秀丸担当 さん 24/03/12 14:41
 
tagsファイルは、昔からShift-JISで、今もShift-JISのはずだと思います。
UTF-8で動いていることがあるとしたら、ちょっとわからないですが、検索対象がASC
II文字で動いているように見えるということかもしれません。
飛び先が複数ある場合にダイアログが出ますが、tagsファイルの内容がUTF-8の場合
は日本語などが文字化けして見えたりしました。
対応するとしたら、BOMなしだど自動判定が挟まるので、BOMありUTF-8ができたらい
いです。
BOMありUTF-8の読み取り対応を検討しようと思います。

[ ]
RE:41086 tagsファイルの文字コードについNo.41087
fzok4234 さん 24/03/12 17:43
 
対応の検討ありがとうございます。やはり SHIFT-JIS だったのですね。

> 対応するとしたら、BOMなしだど自動判定が挟まるので、BOMありUTF-8ができたら
>いいです。
> BOMありUTF-8の読み取り対応を検討しようと思います。

BOM 有り UTF-8 は GIT 及び GitHub でうまく管理できないのでやるべきではありま
せん。

例えば、
https://blog.shibayan.jp/entry/20130529/1369816283
にあるような問題を引き起こすためです。このため、わざわざ
https://qiita.com/kitamin/items/0f0a183771684e853fc2

https://zenn.dev/mebiusbox/articles/1fc0ffef39a446
のように苦心して BOM 有り UTF-8 を排除する人もいるくらいです。

.gitattributes ファイルも BOM 無し UTF-8 や BOM 有り無し両方の UTF-16 は
設定可能だが、BOM 有り UTF-8 はどうやっても設定できません。

このことから、tags ファイルの Unicode 化は UTF-16 または  BOM 無し UTF-8 に
限定されることとなります。tags ファイルに限らずもし他に Unicode 未対応の
設定ファイル等があれば同様となります。

実際に対応するときには、動作環境の「タグジャンプ」のページに「タグファイルを
Unicode にする」というチェックボックスを新設して、これが有効なときのみ tags
ファイルを
Unicode として読み書きを行い、無効なときには従来通り SHIFT-JIS として扱う、
というような
「オプション扱い」とすることで互換性の維持をする必要があろうかと思われます。


[ ]
RE:41087 tagsファイルの文字コードについNo.41088
fzok4234 さん 24/03/12 18:07
 
あとそれから、今後のアップデートで tags ファイルの Unicode 化が入った場合、
ユーザーが
自分で既存の SHIFT-JIS の tags を Unicode の文字コードで上書き保存する必要が
生じます。

しかし、普通に秀丸エディタでファイルを上書き保存するとタイムスタンプまで更新
されて
しまうため、tags のタイムスタンプが狂って「tagsファイルの自動更新」の機能が
上手く
動作しなくなる恐れがあります。このため、上書き保存後にタイムスタンプを元に戻
す作業が
必要になるのですが、これが非常に面倒な操作となります。

そこで、要望があるのですが、秀丸エディタ本体に、
 ・タイムスタンプを変更しないで「上書き保存」。
 ・指定した任意のタイムスタンプで「名前を付けて保存」。
などといった機能を新設してもらえれば助かります。

本来の話題からそれるのですが、よろしくお願いします。



[ ]
RE:41088 tagsファイルの文字コードについNo.41090
秀丸担当 さん 24/03/13 15:46
 
UTF-8をしようと調べてみたら、以前にctags対応の延長で、ctagsのヘッダ部分にUTF
-8が宣言されていたらできるようにしていました。
できるといってもShift-JISに変換できる文字を見えるようにするという程度でした。
BOMなしの勢力があるのもわかりますが、とりあえず秀tagsで生成するわけではない
ので、互換性があるまま読み取りに対応する程度でしてみようと思います。

[ ]
RE:41090 tagsファイルの文字コードについNo.41095
fzok4234 さん 24/03/13 17:17
 
> UTF-8をしようと調べてみたら、以前にctags対応の延長で、ctagsのヘッダ部分にU
>TF-8が
> 宣言されていたらできるようにしていました。
> できるといってもShift-JISに変換できる文字を見えるようにするという程度でした。
> BOMなしの勢力があるのもわかりますが、とりあえず秀tagsで生成するわけではな
>いので、
> 互換性があるまま読み取りに対応する程度でしてみようと思います。


対応の検討ありがとうございます。


「読み取りに対応する程度でしてみよう」とのことですが、もし「読み取り」だけ U
nicode に
対応して「書き込み」では一切対応しないようにしてしまうと、「tagsファイルの自
動更新」の
機能で自動的に上書きする際に問題が起きてしまいます。

よって、「読み取り」と「書き込み」への対応は同時に行う必要があります。


それから、対応する Unicode の文字コードの選定についてですが、今までの他の設
定ファイル類の
Unicode 対応において、*.hmdesk や *.hmbook が BOM 有り UTF-16LE で生成される
ように
なったことや、*.hilight や単語補完の辞書ファイルもユーザーが BOM 有り UTF-16
LE で
作成したものの読み取りに対応できるようになったことを考慮すると、tags ファイ
ルについても
まずは BOM 有り UTF-16LE に対応させることを優先的に行った方がよいのでは、と
思います。

秀丸エディタが扱う各種設定ファイルが、「あのファイルは UTF-8 でこのファイル
は UTF-16 で」と
いうように種類ごとに Unicode のエンコードが異なってしまうと、運用する側での
混乱の元と
なってしまうため、できれば「UTF-16LE、BOM 有り、CRLF」だけは確実に読み書きで
きるように
してもらえれば、ユーザー側で全ての設定ファイル類を「UTF-16LE、BOM 有り、CRL
F」に統一して
運用できるようになって混乱を防ぐことができるようになります。

その上で、後から UTF-8 等への対応を行っていただければよいと思います。


tags ファイルのエンコードが現状では SHIFT-JIS のみであることが発覚したため、
当方において
tags ファイルの扱いを、.editorconfig 上では

[tags]
charset     = latin1
end_of_line = crlf

として、これに合わせる形で .gitattributes も

tags text eol=crlf working-tree-encoding=ASCII

として否応なく ASCII オンリーの状態にしなければならなくなりました。このため、
tags ファイルに
全角文字などを混ぜることができない状態となり、取り扱う編集対象のソースファイ
ルもクラスや
関数の名前を定義した行と同じ行に

public class Foo { // コメント。

といった日本語のコメントを書けないなど、不便な状態を強いられるようになってし
まいました。

tags ファイルの読み取りはもちろんのこと、 秀tags での作成、および自動更新に
伴う書き込みでの
Unicode 対応について、改めてよろしくお願い申しあげます。



[ ]
RE:41095 tagsファイルの文字コードについNo.41105
秀丸担当 さん 24/03/14 15:32
 
秀tagsでも読み書きも、何でもできたらいいです。
tagsファイルで意味があるのは、ダイレクトタグジャンプ飛び先指定のダイアログ中
の表示くらいだと思います。
秀tagsはソースの読み取りはUTF-8でも見て、書き込みがShift-JISです。
ctagsなどの外部による生成を使わず、秀tagsのみが書き込み、秀丸エディタが読み
込むのであれば、Shift-JISに変換できる日本語のコメントは見えます。
既に実用上は何も考えずにできるので、もしUTF-8で設定が必要になってくるとした
らデメリットのほうが大きいと思います。
もしやるとしたら、読み取りは自動判定かなと思います。

[ ]
RE:41088 tagsファイルの文字コードについNo.41109
igus さん 24/03/15 12:25
 
ファイルの更新日時を変更したり削除したりするファイル操作は
秀丸マクロだけでやろうとすると難しいのですが
rubyなどのスクリプト言語と組み合わせると
あんがい簡単に出来たりします
参考になるかどうか分かりませんが試しに作ってみました

http://pansy.s1010.xrea.com/2024/03/15/%e6%9b%b4%e6%96%b0%e6%97%a5%e6%99%82%e3%82%92%e6%93%8d%e4%bd%9c/

[ ]
RE:41109 tagsファイルの文字コードについNo.41112
fzok4234 さん 24/03/17 04:54
 
マクロの提案ありがとうございます。

あいにく Ruby は常用する言語ではないのでコードを理解するのに少々手間がかかり
そうですが、
参考にさせて頂きます。もし実装するとなれば、Windows に元から入っている .Net
Framework 4.8 を
利用する C# の COM 対応 DLL かまたは Windows PowerShell のスクリプトの形にし
ようと
思います。



[ ]
RE:41105 tagsファイルの文字コードについNo.41113
fzok4234 さん 24/03/17 12:46
 
> 秀tagsはソースの読み取りはUTF-8でも見て、書き込みがShift-JISです。

9.32β4 にアップデートした上で、BOM 有り UTF-8 の tags ファイルがちゃんと
「読める」ことを
確認いたしました。

ただ、「tagsファイルの自動更新」機能を有効にしている場合、tags ファイルより
もジャンプ先の
ファイルが新しいときにダイレクトタグジャンプを行うと、自動更新に伴う「書き込
み」により
SHIFT-JIS に戻されてしまいました。

やはり自動更新に伴う書き込みは、読み込んだときと同一のエンコードで行うべきで
しょう。


> tagsファイルで意味があるのは、ダイレクトタグジャンプ飛び先指定のダイアログ
>中の
> 表示くらいだと思います。
> ctagsなどの外部による生成を使わず、秀tagsのみが書き込み、秀丸エディタが読
>み込むのであれば、
> Shift-JISに変換できる日本語のコメントは見えます。
> 既に実用上は何も考えずにできるので、もしUTF-8で設定が必要になってくるとし
>たらデメリットの
> ほうが大きいと思います。

確かに、対象ファイルの各行の「コメント」のみが Unicode 文字の場合は、たとえ
それが SHIFT-JIS への
変換で文字化けしてもダイレクトタグジャンプ自体は機能するでしょう。

しかし、対象ファイルのプログラム本文中の「クラスや関数の名前」が Unicode 文
字の場合は、これが
文字化けしてしまうとそこへダイレクトタグジャンプできなくなってしまいます。C#
 など主に
2000 年代以降にできた言語では識別子名に Unicode 文字が使えるため、これでは困
ります。

さらに、もっと発生確率が高いのは対象ファイル自体の「ファイルパス」が Unicode
 文字の場合
です。tags ファイルのフォーマットは
パス文字列(行番号) : 行文字列
となっているため、パス文字列の部分が文字化けしてしまうとその対象ファイルへ
ダイレクトタグジャンプできなくなります。特に Windows のローカルアカウント名
が Unicode 文字なら
対象ファイルがユーザーディレクトリ内であれば、そのフルパスは確実に文字化けし
ます。



[ ]
RE:41113 tagsファイルの文字コードについNo.41114
fzok4234 さん 24/03/17 16:49
 
先ほど、

> しかし、対象ファイルのプログラム本文中の「クラスや関数の名前」が Unicode
>文字の場合は、これが
> 文字化けしてしまうとそこへダイレクトタグジャンプできなくなってしまいます。
>C# など主に
> 2000 年代以降にできた言語では識別子名に Unicode 文字が使えるため、これでは
>困ります。

と申し上げましたが、実際にコメントではないクラス名の部分に Unicode 文字を使
ってテストしたところ、
その 1 行はスキップされて tags ファイルには取り込まれなかったようです。

実際、C# のファイル UnicodeName.cs を以下の内容にして tags ファイルを作成し
ました。

0001  using   System  ;
0002  
0003  public  class   쇂𧀊 {}
0004  
0005  public  class   B00 {}  // 쇂𧀊
0006  

当方の環境で、1 行目は「行の強調4」、3 行目と 5 行目は「行の強調3」、5 行目
の末尾の // 以降は
「コメント」で色付けされています。出力された tags ファイルは、

UnicodeName.cs(1) : using   System  ;
UnicodeName.cs(5) : public  class   B00 {}  // ???

となっていて、「コメント」で色付けされていないクラス名の部分に Unicode 文字
が使われている
3 行目が抜け落ちている状態です。また、5 行目の「コメント」で色付けされた Uni
code 文字は全て
「?」に文字化けさせる置換フォールバック処理が行われています。


また、憶測で

> さらに、もっと発生確率が高いのは対象ファイル自体の「ファイルパス」が Unico
>de 文字の場合
> です。tags ファイルのフォーマットは
> パス文字列(行番号) : 行文字列
> となっているため、パス文字列の部分が文字化けしてしまうとその対象ファイルへ
> ダイレクトタグジャンプできなくなります。

と申しましたが、実際にはファイル名に Unicode 文字を含んでいるファイルはエ
ラーが出て
スキップされるようです。

実際、©쇂𧀊👩🏼‍👨🏽&#82
05;👦🏼‍👧🏽‍.cs という名前の C# の
ファイルに対して tags ファイルを出力しようとしたら

---------------------------
エラー
---------------------------
ファイル名にユニコード文字が入っています。このファイルはスキップします。
ファイル = ©쇂𧀊👩🏼‍👨&#12799
7;‍👦🏼‍👧🏽‍.cs
---------------------------
OK  
---------------------------

というエラーが表示されて、tags ファイルにはこのファイルの情報は何も出力され
ませんでした。

ただ、これはこれで「ファイル名をフルパスで出力」を有効にして出力するとき、親
ディレクトリ名、
特に
C:\Users\<UserName>\
の <UserName> の部分に Unicode 文字のアカウント名があると tags ファイルの作
成に大きな
支障を来すと思います。



[ ]
RE:41114 tagsファイルの文字コードについNo.41125
秀丸担当 さん 24/03/19 15:43
 
いろいろご指摘ありがとうございます。
ファイル名にUnicode文字が使われている場合は、確かにできないです。
これはShift-JISである限りは無理なので、UTF-8でできたほうがいいです。

クラス名をUnicodeとする場合は、うまく再現できませんでした。
現実問題としてそういう使われ方をするのだろうかとも思いましたが、config文のヘ
ルプのJSONの説明で自分が日本語タイプ名を書いていたくらいので、普通にありえる
気もしてきました。
いずれもできたほうがいいと思います。
また検討していきます。

[ ]