2015/07/14

Swiftでファイルパスを扱っていたときの事です。
以前からMacでプレイリストを作ると、パスが見つからないって言われることがあります。
原因はMacのファイルシステムとのことです。
Macの内部で使われているのがNFDというタイプ。(UTF8-mac)
Mac以外だと概ねNFCが使われています。(UTF-8)
UTF-8というところからわかると思いますが、ASCIIのみであれば問題は発生しません。
日本語などを使った場合におかしくなります。

どういう風になるかというと、NFDだと濁点や半濁点を1文字として扱います。
例としては、NFCだと「ブ」、NFDだと「フ゛」となります。

この問題はファイルの内容では起きなくファイルパス(ファイル名)で問題が起きます。
内部でファイルパスを取得するとNFDで取得されるので、ファイルに書き出すとNFDのまま書き出されます。
そのため、Mac以外からそのパスへアクセスしようとすると見つからなくなります。

そこでSwiftでどのようにするかというと簡単です。
pathにファイルパスが格納されているとします。
 
path = path.precomposedStringWithCanonicalMapping

これだけです。
これで、NFDからNFCへの変換ができます。

逆に、NFCからNFDにする場合は、
 
path = path.decomposedStringWithCanonicalMapping

です。

ファイルパスも自分で組み合わせてパスを作る分にはNFCで問題ないですが、FileManagerを使ってファイルパスを取得して、その取得したパスをそのまま使うとNFDになりますね。

ファイルパスを扱う場合は気をつける必要がありますね。
 
 
2009/11/04

BlackBerry用のシンプルなテキストエディタが完成しましたので配布いたします。
BlackBerryの内蔵アプリや海外アプリだとSJISが対応していないため、
SJISで作られたファイルの読み込みを行うと文字化けします。
そこでこのアプリが活躍します。
SJIS、EUC-JP、UTF-8、JISの4文字コードに対応しています。
過去に作ったSJISファイルや、SJISで送られてきたもの。
そしてSJISで作成したい場合、こちらのエディタで対応が可能です。
シンプルなので、ファイルの読み込み、作成、検索くらいしかできません。
(他にはあまり必要無いとは思いますが・・・)

※BlackBerryは既にマッピングされているファイルの関連づけが変更できないようなので、エクスプローラからtxtファイルをクリックしても起動はできません。
同様にメールに添付されてきたテキストファイルも直接開けないので、
一度どこかに保存して、このアプリを立ち上げて、そのファイルを読み込むようにしてください。

では使い方です。
 

Copyright © Rocomotion