2010-11-18 96 views
2

我面臨碼頭字符編碼的問題。當在Mac(OSX)上安裝碼頭服務器時,它工作正常。但是,當它安裝在Ubuntu(10.10)上時,字符編碼不正確。碼頭字符編碼問題

在頁面(不URL)這個詞有問題是:紐約時報®暢銷產品

它將顯示爲一個服務器在Linux上

服務的頁面上「紐約Times�暢銷產品」

,並顯示爲頁上的「紐約時報®暢銷產品」通過在服務器上的Mac服務(這是正確的)

Jetty服務器版本是:hightide-7.0.2.v20100331

提供的文件的字符編碼是:UTF -8

如果需要更改任何設置以解決此問題,請讓我知道嗎?

在此先感謝!

回答

3

明白了;對我來說,它缺少的JSP的編碼標題:

<%@ page contentType="text/html;charset=UTF-8" language="java" %> 
+0

這隻對JSP頁面有幫助,但... – Noah 2012-07-02 15:20:20

5

我有碼頭8類似的問題,並通過加入這行來斌/ jetty.sh解決它:

JAVA_OPTIONS+=("-Dfile.encoding=UTF-8") 
3

我也有這樣的問題,我想感謝aditsu的答覆。

我在ubuntu 12.04(和14.04)上的Jetty服務器上使用restlet。 restlet應用程序位於一個充當proxyPass的Apache服務器後面。

所有文件都是UTF-8。
所有HTTP響應都有內容類型文本/ html;字符集= UTF-8。
所有文件包含<元CONTENT = 「text/html的;字符集= UTF-8」 HTTP的當量= 「內容類型」/ >

奇怪的是,當服務器引導和我親臨現場,字符編碼不是UTF-8,所以我得到了所有這些有趣的字符。即使所有信號都告訴服務器和代理以及UTF-8之間的所有內容都使用了de編碼。

當我在服務器啓動後手動重新啓動服務時,所有的字符都沒問題。因爲我無法輕鬆找到答案,並且我不知道是誰造成了這種錯誤編碼,所以我一直手動重新啓動服務。

當時我的候選人是:Apache,Ubuntu服務引導順序,Restlet框架,實際使用的文件編碼,HTTP標頭,HTML元標記。但所有的事情都應該如此。

所以最終它是Jetty,我只是在多次重訪這個問題後才考慮過。

我仍然不知道爲什麼從啓動時開始使字符編碼全部錯誤,並且在手動重新啓動服務之後編碼是正確的。添加額外的JAVA參數'-Dfile.encoding = UTF-8'使它全部消失。感謝aditsu再次分享他的解決方案!

乾杯

編輯: Settting在啓動腳本LANG環境變量也不能解決問題。即

出口LANG =的en_US.UTF-8

實際上這是在系統啓動時開始的碼頭服務器之間的差(LANG沒有定義開箱),並從一個殼啓動它。因此,針對同一問題的兩種解決方案

0

您可能直接讀取原始http編碼,並且您需要使用解碼器將其解碼爲utf8。

use java.net.URLDecoder line = URLDecoder.decode(line,「UTF-8」);

對於將文本編碼爲html charset,使用URLEncoder,就像當java String直接發佈時一樣: line = URLEncoder.encode(line,「UTF-8」);

+0

請爲您的代碼添加格式。 – 2017-04-09 13:44:57