2010-05-02 35 views
1

我在Google AppEngine中做了一個小項目,但是我遇到了國際字符問題。我的程序通過URL「page.html?data1 & data2 ...」從用戶處獲取數據並將其存儲以供稍後顯示。在AppEngine中解碼國際字符

但是,當用戶使用某些國際字符(如åäö)時,它會被編碼爲%F4,%F5和%F6。我認爲這是因爲在http請求中只允許ASCII表中的前128個字符(?)。

有沒有人對此有一個很好的解決方案?任何簡單的方法來解碼文本?在存儲數據之前對它進行解碼還是更好,或者在向用戶顯示時解碼它。

回答

1

網址可以包含任何內容,但應該是encoded。在Java中,您可以使用URLEncoderURLDecoder對所需字符編碼的URL進行編碼和解碼。

請記住,這些類實際上是用於HTML表單編碼,但它們可以應用於URL的查詢字符串(參數),因此請勿在整個URL上使用它們 - 僅限於參數。

+0

得到了一些問號而不是%代碼。但我應該能夠以某種方式解決這個問題。謝謝您的幫助! – Irro 2010-05-02 11:48:30

+0

對於我的問題的其他人:我通過使用ISO-8859-1解碼工作。出於某種原因,UTF-8無法使用。 – Irro 2010-05-02 11:59:21

+1

URL的內容編碼取決於瀏覽器以及包含URL或表單的頁面的編碼。嘗試顯式提供包含表單的頁面爲UTF-8。 ISO-8859-1可以解決您的直接問題,但會使用戶無法使用絕大多數unicode字符。 – 2010-05-02 13:12:45

0

URI規範(RFC 3986)限制可用於URI的字符(請參閱ABNF),並定義傳輸「不安全」字符的百分比編碼方案。由於Bozho says,URL的查詢部分通常按照HTML規範(application/x-www-form-urlencoded)進行編碼。

doc for App Engine說:

App Engine使用Web應用程序的Java Servlet的標準。

所以,你應該讓Servlet API爲你解碼參數。請參閱HttpServletRequest上的參數方法。這種編碼通常應保存在視圖層,因此數據將被存儲爲未編碼。

如果您手動執行操作,請查看this blog post on character handling in URIs

+0

有另一個問題,但這真的很有幫助。謝謝! – Irro 2010-05-02 11:48:46