ファイル名が全角 13 字以上あるファイルを SharePoint からダウンロードするとファイル名が欠落する

本投稿では、ファイル名が全角 13 字以上あるファイルを SharePoint からダウンロードするとファイル名が欠落する現象について解説します。

現象
SharePoint 上のドキュメント ライブラリや OneDrive for Business ライブラリにおいて、アップロードされたファイルのファイル名が全角 13 字以上ある場合に特定の条件でダウンロードしたファイル名が欠落します。
例として、リボン メニューや SharePoint のアイテム コンテキスト メニューからの [コピーのダウンロード] (または [ダウンロード]) などを使用した場合などに本現象が発生します。

原因
本動作は SharePoint の制限事項になります。
コピーのダウンロード機能は、要求先の URL として download.aspx で実装されています。download.aspx は、渡されるパラメータなどをベースに様々なファイル名を返す必要があるため、HTTP ヘッダーの contentdisposition にファイル名を指定します。 この HTTP ヘッダーに格納できる文字列は様々なブラウザーへの影響を考慮して 128 文字に制限されており、この制限を超えるファイル名を持つファイルについては、128 文字以下に切り捨てる動作となります。

また、SharePoint では、ダウンロードするファイルのファイル名に拡張 ASCII 文字やダブルバイト Unicode 文字などの非標準 ASCII 文字が含まれる場合、これらの各文字を、Web ブラウザーに渡すときに 2 文字以上の ASCII 文字に URL エンコードします。 このエンコード処理の結果、ファイル名に日本語などのダブルバイト文字が使用されていた場合に、使用できる文字数が大幅に減少します。

例えば、日本語の「あ」という URL エンコードした場合、下記のとおり半角英数字 9 文字でエンコードされます。

<< 例 1 >>
あ : %E3%81%82

ファイル名に対して使用できる文字数は 128 文字に制限されていますので、ファイル名がすべて全角文字であり、拡張子が .docx (5 バイト) などの場合、(128 - 5)/9 = 13.666… となり、使用可能な文字数は全角文字で 13 文字となります。

<< 例 2 >>
ライブラリ上のファイル名 : あいうえおかきくけこさしすせそ.xlsx
ダウンロード時 : あいうえおかきくけこさしす.xlsx

回避策
長いファイル名が切り捨てられる動作については、ブラウザからダウンロードする際の制限となります。
ドキュメント ライブラリ上のファイルの場合は、上部リボン メニューから [エクスプローラーで開く] を実行することにより、ファイル名が短縮されることなくダウンロードが可能となります。

また、以下のような操作も回避策として有効です。

・ハイパーリンクを右クリックし、ブラウザーの右クリック メニューが表示される場合は [対象をファイルに保存] を実行する。
・ブラウザーからファイルを直接ドラッグして、ローカルにドロップする。

参考資料
以下の資料では、SharePoint Online で [エクスプローラーで開く] の機能を利用するための条件について記載されています。

Office 365 SharePoint Online で"エクスプローラーで開く"のオプションを使用する方法、およびこのオプションに関する問題をトラブルシューティングする方法
https://support.microsoft.com/kb/2629108/ja

以下の資料では、SharePoint で扱える URL パスの長さ制限について記載されています。
資料は SharePoint 2010 のものですが、SharePoint 2013 においても同様に参考いただけます。

URL パスの長さ制限 (SharePoint Server 2010)
https://technet.microsoft.com/ja-jp/library/ff919564(v=office.14).aspx
**************************************
URL エンコード
...
拡張 ASCII 文字やダブルバイト Unicode 文字などの非標準 ASCII 文字が SharePoint の URL に含まれている場合、これらの各文字は、Web ブラウザーに渡されるときに 2 文字以上の ASCII 文字に URL エンコードされます。したがって、URL に拡張 ASCII 文字やダブルバイト Unicode 文字が多数含まれていると、エンコード前の元の URL よりも文字数が増える可能性があります。倍増率の例を次の表に示します。

・拡張 ASCII 文字 — 例: (!、"、#、$、%、&、[スペース]): 倍増率 = 3
・ダブルバイト Unicode 文字 — 例: 日本語、中国語、韓国語、ヒンディー語: 倍増率 = 9
...
SharePoint の URL パスの長さ制限
...
128 Unicode (UTF-16) コード単位 - パスの構成要素内の文字。つまり、ファイルまたはフォルダー名。
**************************************

補足事項
本動作に関する解説は 2017 年 4 月 13 日時点において、以下の製品に適用されます。

SharePoint Server 2013
SharePoint Server 2010

※SharePoint Online においてはこの問題は発生しません。