diff --git a/codimd_export.py b/codimd_export.py
index 6448d2c2717496857e19df46b5f4c02375ca032d..cfb60d1a5f6daef1c0f8953bebd7489dc3be906a 100755
--- a/codimd_export.py
+++ b/codimd_export.py
@@ -7,6 +7,7 @@ import json
 import sys
 from pathlib import Path
 from urllib.error import HTTPError
+from urllib.parse import quote
 from urllib.request import Request, urlopen
 
 if not sys.platform.startswith("win"):
@@ -44,7 +45,7 @@ def main(instance_url, session_id, export_to):
     num_ok = num_fail = 0
     for row in data["history"]:
         document_id = row["id"]
-        document_url = f"{instance_url}/{document_id}"
+        document_url = f"{instance_url}/{quote(document_id)}"
         try:
             contents = slurp(f"{document_url}/download", session_id)
             with open(Path(target_dir, f"{document_id}.md"), mode="wb") as stream: