2012-01-12 189 views
3

對於Apache來說,我是一個相當新手,因爲我剛剛開始Web開發,所以如果我沒有提供足夠的信息,請詢問更多細節。關於Mac OS X Lion上的Apache

我使用Lion附帶的開箱即用的Apache,並且我創建了一個Python應用程序,每隔一段時間需要打印一個UTF-8字符。

但是,無論我使用什麼方法,或者嘗試了多少次,當我嘗試打印出UTF-8字符時,它將丟棄500 Internal Server Error,而我將一無所有。

我已經試過各種事情:(隨着# -*- coding: utf-8 -*-在代碼的頂部)

  • 打印出的字符直接從Python代碼
  • 打印出來使用.decode('utf-8')功能的字符。 (這會導致打印出3個單獨的字符)
  • 打印出一個佔位符,然後打印出將用符號代替佔位符的Jquery(並且頁面引發內部服務器錯誤)
  • 打印出一個佔位符,然後打印出一個鏈接到一個將替換它的Jquery腳本。 (Firebug說,當試圖訪問腳本時,Firefox得到500服務器錯誤。)

我想不出別的什麼。 這就是爲什麼我在這裏問過。

有什麼建議嗎?

感謝 〜DragonXDoom

編輯:下面嘗試了威爾的建議之後,我現在得到以下錯誤。

<type 'exceptions.UnicodeDecodeError'>: 'ascii' codec can't decode byte 0xe2 in position 0: ordinal not in range(128) 
    args = ('ascii', '\xe2\x80\xa2', 0, 1, 'ordinal not in range(128)') 
    encoding = 'ascii' 
    end = 1 
    message = '' 
    object = '\xe2\x80\xa2' 
    reason = 'ordinal not in range(128)' 
    start = 0 
+1

我並不熟悉Python作爲Web語言,但如果您在請求中發送正確的UTF-8內容類型/字符集HTTP標頭或同等HTML元標記,則第二種方法可能會正常工作。瀏覽器可能試圖使用ISO-8859-1來解碼它。 – 2012-01-12 07:41:17

+0

正如我所說,我很新,所以你可以舉一個這樣的meta標籤或頭的例子嗎? – DragonXDoom 2012-01-12 07:45:06

+0

這實際上與Apache或Mac OS X無關。:)只是python和unicode,我建議使用這兩個標籤來代替。 – Arafangion 2012-01-12 08:33:26

回答

1

您必須閱讀http://www.joelonsoftware.com/articles/Unicode.html,以便您對一般問題有所瞭解。

一旦你明白這一點,那麼你應該學會如何處理Unicode的正確使用Python,我認爲下面的網站應該是有用的,雖然很長:http://boodebr.org/main/python/all-about-python-and-unicode

不管你做什麼,請不要吝嗇或跳過在理解unicode - 否則你將繼續有微妙的問題。

而且,你的狀態,你已經嘗試使用.decode(「UTF-8」) - 這是不行的,如果Python有/已經/理解數據爲Unicode - 要編碼吧!

0

要闡述我的意見,你可以知道哪些編碼該頁既可使用HTTP標頭傳輸的瀏覽器:

Content-type: text/html; charset=UTF-8 

或等效<meta>標籤(它出現在在你的HTML <head>部分):

<meta http-equiv="Content-type" value="text/html; charset=UTF-8" /> 

這樣,它應該正確解釋UT它收到的F-8字符。 (text/html可以替換爲更合適的MIME類型。)

至於第一次嘗試,# -*- coding: utf-8 -*-,我期望這是因爲Apache不知道如何解釋UTF-8源文件。

再一次,我不是很熟悉在Apache上運行Python,但也許這會有所幫助!

+0

好吧,我已經試過了。 但現在我得到一個關於主要問題的錯誤。 – DragonXDoom 2012-01-12 08:21:51