pCloudとMusicBeeで起こったNFC NFD問題
NFC NFD問題とは
NFC NFD問題とは
WindowsとMacでは、濁点・半濁点の処理方法が違うのであーる
https://1.bp.blogspot.com/-oaCMFuezwzk/WmPSI3OBGSI/AAAAAAAAgrc/tNnx06qtLwwxDaf6oLifbd10-LjUXMWywCLcBGAs/s1600/PIC04791.jpg
こんな感じで、Macは濁点・半濁点をひとつの文字として認識してしまうのだ!
hyouhyan.iconナンデジャ!!
事象
事の発端はpCloud
2024年のバレンタイン企画、60,000円で2TBをライフタイム契約すれば、お友達に同じプランをプレゼント
友達と協力し、実質30,000円で、2TB Lifetimeプランを契約
よし!NASの中身をpCloudに全部移そう!!
俺のMusicLibraryをアップロード
俺はDJをやってるから、ローカルに楽曲が色々保存されてる
曲の管理にはMusicBeeを使ってる
その中には当然、濁点・半濁点が含まれる
例: キズナアイ、ウマ娘プリティーダービー、東京ドギマギ
ちなみに元々は
ノートPC(Mac)、デスクトップPC(Windows)、NAS(Linux)の3OSで同期
hyouhyan.iconMacはPCじゃないとかそんな話はいいんだよ
Syncthingを利用
pCloudにアップロード後、MusicBeeとSyncthingに異変が
MusicBee「ファイルのパスが見つかりません!!」
どんどんと俺のライブラリから曲が消えてゆく…
なんでぇ????
Syncthing「同一名のファイルが複数存在します!!」
え???????
また、別のファイルでは
https://gyazo.com/aca5aef5c3b3403631e24f675a493223
改行の位置おかしくね?
ここで気づく
hyouhyan.icon「濁点半濁点が悪さをしている…?」
pCloudのWebGUIでファイルを確認する
https://gyazo.com/1a3b6501c1a8c677078617043aefe4ad
濁点半濁点ありのやつだけ重複してる…
ここで出会う、NFC NFD問題
Unicodeでは見た目が同じでもバイト列が異なる表現が可能
異なる表現に変換することを正規化と呼ぶ
しかしこの正規化、OSによってルール(正規化形式)が違う
hyouhyan.iconOSによってというか、Macがおかしいだけ
問題点はUnicode正規化形式の違い
WindowsやLinuxで使われる正規化形式はNFC
hyouhyan.iconなんかタッチ決済できそうな名前
Macで使われる正規化形式はNFD
例えば、「パ」はUnicodeでU+30D1と表される
これをNFC、NFDで正規化すると
table: nfc-nfd
正規化形式 正規化後のUnicode
NFC (パ U+30D1)
NFD (ハ U+30CF)+ (゜ U+309A)
MusicBeeでエラーが出たのは
MusicBeeはNFD形式でファイルが存在してもNFC形式のパスでファイルを探そうとする
そのため、見つからない
Syncthingでエラーが出たのは
NFD形式のファイルはNFC形式に変換して処理する
そのため、同一ファイルが複数ある事になった
File "..." contains non-NFC UTF-8 sequences and cannot be synced. Consider renaming.
非NFCの文字(NFCに変換できない文字)が含まれてるとエラー出してくれるみたい
結局この件、悪いのは誰?
見方によっては誰が悪いとも取れるよなぁ…
pCloudが悪い
Dropboxとかだと、NFC NFDのケアをしてくれる
NFD形式のファイルは自動でNFC形式に変換する
pCloudが、東京ドギマギ(NFC)と東京ドギマギ(NFD)を同一ファイルとして扱ってくれれば、この問題は起きなかった
MusicBeeが悪い
MusicBeeはNFD形式でファイルが存在してもNFC形式のパスでファイルを探そうとする
この仕様はおかしい
まあ、普通に使ってればWindows機でNFD形式のファイルが生成されることはないから、仕方ないかもしれんけど
Macが悪い
絶対これだろ
なんでNFDなんて規格を使うんですか????
対処法
現状取ってる対処法
Windows - Mac間の同期にはSyncthing
Windows - pCloud間は同期ではなく、バックアップ機能を利用
未実施だけど、効果の出そうな対処法
pCloudの同期に、NASを挟む
NASにpCloudCLIを入れて、3端末で同期を行う
俺の使ってるNAS(Synology)は、NFDをNFCに自動変換してくれる
なんて素晴らしい仕様なの!!
ちゅき!!!
変換役としてNASを挟めば、いい感じにならんかなぁ…と
Win - Mac間の同期にpCloudとSyncthingを両方使う
SyncthingもNFDをNFCに自動変換してくれる
この仕様を使えるかも
でも、1つの同期に2つのソフトを使うのはな…
ソフト同士の衝突が起こって、新たなエラーが出そう
愚痴
俺、この問題のせいで土日奪われたんすよ…
普段は同一ファイルが生成されてもMusicBeeの「重複を削除」で消せるのに、MusicBeeは認識すらせんし…
全部NFDに変わってくからMusicBeeからどんどん曲が消えてくし…
そう!Macは勝手にNFCをNFDに変換しやがるんよ!!
おかしくね???
誰も望んでないよそんなの
全削除して、バックアップから曲復活させたら、追加順に並んでたのがグチャグチャになるし
ちなみにこのグチャグチャは治せなかった
このハッシュタグを流行らせてくれ…
参考