偶然的通行人 さんが書きました:
meeyar さんが書きました:
このスレが随分と長くなったので、とりあえずの回避策のみ新規で分けました。
とのことなので、新規トピックで話が錯綜しないよう、こちらに書かせていただきます
その方がいいでしょうね。
あっちのスレッドは、回復手順の要点を的確・簡潔にまとめてユーザーが参照できるようにしておけば、あっちのスレッドをポイントしておしまい、にできる。
「~のようだ」といったいい加減な根拠で書かれた手順なんて、百害あって一利なし、だし、こっちはこっちで、問題がなにかをつきとめるだけで時間と手間がかかり、ようやく最終案になりそうなパッチが提供されたかも、という段階で、まだまだフォローがいるから長くなるし、「ボタン一発で全て解決」を期待しているユーザーさんだと読む気にもならないでしょう。
で、Unicodeには、(a)「グ」(U+30B0の1文字のみ、utf-8=0xE382B0、NFC、Composed Form、全角かな・カタカナ方式)で表現する場合と、
(b)「ク」と「゙ 」(U+30AFとU+3099の2文字、utf-8=0xE382AFとutf-8=0xE38299、NFD、Decomposed Form、半角カタカナ方式)で表現する場合があって、
文字の入力や表示では通常(a)なので、そこに(b)のものをペーストすれば、(b)を(a)に変換する処理が入っていなければ、おっしゃるような現象が起きますし、
(a)と(b)が混在するとやりにくくってしょうがないから「正規化」して、どちらかに統一する、ということをします。
しかし、今回の問題は、アプリケーションがちゃんと正規化しているか・していないか、といった類の問題とは、毛色が違います。
(0) Mac OS Xでは、ファイルの作成は(a)でファイル名をリクエストするが、HFS+のデフォールト(推奨)では、ファイルシステムが(b)でファイル名を保存する。
(1) Mac OS X上でThunderbirdが、msgFolder=createLocalSubfolder(NFCのファイル名)でフォルダーを作った時に、msgFolderオブジェクトのmsgFolder.URIには、NFC(Composed Form)のmailbox URIがセットされる。
(2) Mac OS X上でThunderbirdが、フォルダーをオープンした時に入手したmsgFolderオブジェクトのmsgFolder.URIには、HFS+ファイルシステム内のファイル名を元にした、NFD(Decomposed Form)のmailbox URIがセットされる。
(3) フィードで購読をした時に(1)でファイルが作られると、feeds.rdf内のfz:feedのエントリーに、(1)のmsgFolder.URIの値が書かれ、それがそのままfz:feedのエントリーの検索に使われるので問題なし。
しかし、再起動後は、(2)のmsgFolder.URIの値を使ってfz:feedのエントリーの検索が行われるので、エントリーを見つけられない。
この、Mac OS XのHFS+における、(1)と(2)のmsgFolder.URIの値の食い違いが、問題なのです。
フォルダーを最初に作った時のmsgFolder.URIの値をfeeds.rdfに保存しておいてそれを未来永劫使う、という、フィード側の悪行のせいなのかもしれないけれど、
Mac OS XのHFS+にきちんと対応していないcreateLocalSubfolder()のバグだと言ってもいいように思います。
(createLocalSubfolder経由だと、本来のデザインのファイルシステム上のファイル名からではなく、メモリー上のリクエストした名前からmsgFolder.URIをセットしている、とか)
UnicodeのNFD/NFCが関係するし、feeds.rdf内のチェックをしてもらった時に、%エスケープしたutf-8のデータがでてきますから、そのあたりの説明はユーザーに対して親切でしょうけど、「全角ひらがな・カタカナ方式のデータ」と「半角カタカナ方式のデータ」の2種類がある、という程度であっても、問題の本質の説明と回復手順の説明には、何の支障もないと思います。
わからなきゃ、「unicode NFC NFD」でググルとかすれば、一杯ヒットして来るんだから、一々長い説明を加える必要はないんじゃないかなぁ。
やりすぎると、「~のようだ」をベースにした、闇雲に何かを削除して購読させる、というのと、似たり寄ったり。
また、Linux/Winでは、ファイルシステム上のファイル名は、Unicodeをサポートしている場合は、NFCを使うか、リクエストされたファイル名そのまま、で、UIなどでは全てNFCだから、この問題はおきません。
だから、LinuxやWinでの例をだしてくるのもどうかと。
(WinのNTFSだと、任意のUnicodeの文字をファイル名に使えたはずだから、NFDのフィル名とNFCのファイル名は、別物かも。大文字と小文字の同一視、みたいなことをしているかもしれませんが)
[追記 on 2015/11/06]
ユニコードの日本語のひらがな・カタカナだったら、
http://www.taishukan.co.jp/kokugo/webko ... 03_03.htmlラテン文字のウムラウトやマクロンやアキュートとかだったら、
http://www.taishukan.co.jp/kokugo/webko ... 03_02.htmlあたりをポイントしておけばいい。
高校生向けの参考書的に書かれているから、わかりやすいし。
どうしても例を提示して自分で説明したいんだったら、
Mac OS X上でフィードのフォルダーのリネームだけで問題を再現できるから、Mac OS X上で、「U + ウムラウト(COMBINING DIAERESIS,U+0308) + マクロン(COMBINING MACRON,U+0304)」と「U + マクロン + ウムラウト」の可能な組み合わせのそれぞれでリネームしてみると、面白いかも。
「Uウムラウト」はNFC(Composed Form)の単独の文字としても定義されているから、バリエーションが増える。
立方メートル==㎥(U+33A5)==「m(U+006D) +上付きの3(U+00B3)」にリネームしてみるとか、「か+半濁音」(鼻濁音の表現)にリネームして遊んでみるとかも、いいかもしれません。
[追記おわり]