summaryrefslogtreecommitdiff
path: root/cherrypy
diff options
context:
space:
mode:
authorJan Rieger <jrx@centrum.cz>2020-04-16 19:43:40 +0200
committerSviatoslav Sydorenko <wk@sydorenko.org.ua>2020-04-17 17:56:24 +0200
commita906ced81451c15a958181386a8492b25bb2ee1c (patch)
tree64327369e65e0f5cd3e2282efe3ddb947bca0a28 /cherrypy
parent9ca3f6674800b94f49abedbaf9f1bdd982ca8f46 (diff)
downloadcherrypy-git-a906ced81451c15a958181386a8492b25bb2ee1c.tar.gz
Change normalization algorithm to `NKFC` and add docstring for this solution
Diffstat (limited to 'cherrypy')
-rw-r--r--cherrypy/lib/static.py10
1 files changed, 9 insertions, 1 deletions
diff --git a/cherrypy/lib/static.py b/cherrypy/lib/static.py
index d806242d..70556739 100644
--- a/cherrypy/lib/static.py
+++ b/cherrypy/lib/static.py
@@ -34,9 +34,17 @@ def _make_content_disposition(disposition, file_name):
This function implements the recommendations of :rfc:`6266#appendix-D`.
See this and related answers: https://stackoverflow.com/a/8996249/2173868.
+
+ As normalization algorithm for `unicodedata` is used composed form (NFC and NKFC)
+ with compatibility equivalence criteria (NFK), so "NKFC" is the one.
+ It first applies the compatibility decomposition, followed by the canonical
+ composition. Should be displayed in the same manner, should be treated in
+ the same way by applications such as alphabetizing names or searching,
+ and may be substituted for each other.
+ See: https://en.wikipedia.org/wiki/Unicode_equivalence.
"""
ascii_name = (
- unicodedata.normalize('NFKD', file_name).
+ unicodedata.normalize('NKFC', file_name).
encode('ascii', errors='ignore').decode()
)
header = '{}; filename="{}"'.format(disposition, ascii_name)