2016-02-07 34 views
0

我正在使用Python3.4和瓶子web-framekwork通過AJAX POST請求傳遞文件名到一些打開文件並運行它的python代碼。但是,當文件名有非英文字母時,例如韓文。由於路徑錯誤,我無法打開文件。Python3.4處理UTF編碼的POST數據

如果我escape()通過它在Javascript,然後在Python代碼中使用html.unescape(),我得到了稍微修改錯誤:

FileNotFoundError: [Errno 2] No such file or directory: 'C:\Data\[%uC9C1%uCEA0] 16%uBC0D%uC2A4 (%uC218%uC544) %uC6B0%uB9AC.mp4'

我該如何處理這個正確的,所以我可以訪問非英語名稱的文件?

在此先感謝。

+0

這似乎是一個字符串編碼問題,請閱讀:[每個軟件開發人員必須知道的關於Unicode和字符集的絕對最低限度](http://www.joelonsoftware.com/articles/Unicode.html) – bastelflp

回答

0

你可以這樣做;我測試了它,它不存在這樣的問題:

在瀏覽器(JQuery的/ JavaScript的):

function newModule() { 

     var path = $("#path").val();   // Whatever value you want to be sent. 

     $.ajax({ 
      url: "{% url 'modules' %}",  // Handler as defined in Django URLs. 
      type: "POST",      // Method. 
      dataType: "json",     // Format as JSON (Default). 
      data: { 
       path: path,     // Dictionary key (JSON). 
       csrfmiddlewaretoken: 
         '{{ csrf_token }}' // Unique key. 
      }, 

      success: function (json) { 

       // On success do this. 

      }, 

      error: function (xhr, errmsg, err) { 

       // On failure do this. 

      } 

     }); 

在服務器引擎(蟒蛇):

def handle(request): 

    # Post request containing the key. 
    if request.method == 'POST' and 'path' in request.POST.keys(): 

     # Retrieving the value. 
     current_title = request.POST['path'] 
     # You can also do |ttl = current_title.encode('utf-8')| to make sure. 

    # ... 
+0

輝煌,它的工作非常完美。非常感激!標記爲正確的答案。 –

+0

非常歡迎。我很高興你發現它有幫助。 – Pouria