From b8a0d2092fc14c505b8e5e68606f3078edd4815f Mon Sep 17 00:00:00 2001
From: Enzo Simonnet <enzosim@laposte.net>
Date: Tue, 7 May 2024 15:03:29 +0200
Subject: [PATCH] =?UTF-8?q?gestion=20de=20l'encodage=20des=20caract=C3=A8r?=
 =?UTF-8?q?es=20utf-8=20dans=20l'url=20des=20requ=C3=AAtes=20curl?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/app.py | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/src/app.py b/src/app.py
index b2d9c8b..72fae32 100755
--- a/src/app.py
+++ b/src/app.py
@@ -1,5 +1,11 @@
 from flask import Flask, Response, json, jsonify, request
 from flask_cors import CORS
+from urllib.parse import unquote
+import requests
+
+# import sys
+# import codecs
+# sys.stdout = codecs.getwriter('utf-8')(sys.stdout.buffer, 'strict')
 
 import config
 from wiktextract_wrapper import Wiktextract
@@ -28,6 +34,9 @@ def index():
 
 @app.route("/simplesearch/<lang>/<word>", methods=["GET"])
 def search(lang, word):
+    word = requests.utils.unquote(word)
+    word = word.encode('latin-1').decode('utf-8')  # Decode the word from Latin-1 to UTF-8
+    # print(word)
     if lang not in config.supported_wiktlangs:
         return jsonify({"error": f"Language {lang} not supported"}), 400
 
@@ -55,8 +64,11 @@ def search(lang, word):
         if wiktextractor.wxr.thesaurus_db_conn:
             wiktextractor.wxr.thesaurus_db_conn.close()
 
-@app.route("/search/<wiktlang>/<wordlang>/<word>/<format>", methods=["GET"])
+@app.route("/search/<wiktlang>/<wordlang>/<path:word>/<format>", methods=["GET"])
 def search_and_format(wiktlang, wordlang, word, format):
+    word = requests.utils.unquote(word)
+    word = word.encode('latin-1').decode('utf-8')  # Decode the word from Latin-1 to UTF-8
+    # print(word)
     # app.logger.info('Received a request from  /search/<wiktlang>/<wordlang>/<word>/<format>')
     if wiktlang not in config.supported_wiktlangs:
         return jsonify({"error": f"Language {wiktlang} not supported"}), 400
@@ -64,7 +76,7 @@ def search_and_format(wiktlang, wordlang, word, format):
     if len(format)>2 and format[0:2] in ("a_", "A_"):
         ascii = True
         format = format[2:]
-        print(ascii, format)
+        # print(ascii, format)
     else:
         ascii = False
     try:
-- 
GitLab