2011-04-13 67 views
1

我正在編寫一個測試應用程序。它由一個小型桌面應用程序和servlet組成。桌面是一個客戶端,並且可以從任何操作系統連接到我的servlet,正如我所想的那樣。這是greate,但我有一個txt文件在服務器上。我的桌面應用程序將行添加到txt文件(圖像文件名稱)。這些行可能包含西里爾詞,如「картинка1.jpg」,這是最大的問題,因爲我無法將原始西里爾文圖像名稱返回給我的客戶。這使得使用它的名字下載圖像變得不可能,因爲服務器無法識別像「??????? 1.jpg」這樣的圖像名稱以將其讀回到我的客戶端。我知道這是所有的編碼問題,但我想知道如何使我的客戶端桌面應用程序正常工作與我在Linux上的servlet?我的意思是如果我的客戶端和服務器有不同的本地化和「file.encoding」,我應該怎麼做?不同的操作系統 - 如何讀取客戶端應用程序的服務器txt文件

OK ......接受你的沉默我要解密的一些細節。所以事情我做的事情和我得到的是

  • A)(客戶端)我用JFileChooser,以獲取 圖像文件名(讓叫它nameX)
  • B)(客戶端)我使用HttpClient的4 StringBody(nameX, 「UTF-8」)的 nameX從FileItems 發送到我的servlet
  • C)(服務器)獲取nameX和寫入(添加)到N.txt文件
  • d)(客戶端)我得到的圖像文件 名稱顯示列表(CP1251編碼 因爲客戶端支持的話)和 選擇「nameX」
  • E)(客戶端)發送「nameX」與 StringBody( nameX,「UTF-8」)頭 的servlet
  • F)(服務器)獲取nameX,但由於某種原因 它是像 ?????? 1.JPG因此它無法識別 文件名是.. 。

所以我的問題是某處回來/以前的編碼我想,但我不知道......

我檢查了我的服務器編碼是

  • os.name = Linux的
  • sun.jnu.encoding = UTF-8
  • 文件。編碼= UTF-8
  • user.language = EN

和我的客戶是:

  • os.name = Windows XP中
  • sun.jnu.encoding = CP1251
  • 的file.encoding = CP1251
  • user.language = RU

請幫助我理解我在做什麼錯誤?

任何有用的註釋是讚賞:)

+3

確保您在兩端都使用UTF-8,而不是依賴於環境中的默認設置。 – Erik 2011-04-13 14:33:19

+0

那麼,我的客戶端是windows,它使用cp1251,服務器是unix,它使用utf-8 – user592704 2011-04-13 14:37:00

+0

但是,如何將我的servlet寫入unix txt文件中的正確映像名稱列表從我的客戶端操作系統的名稱?我嘗試編碼從cp1251到UTF-8的所有名稱,但由於某種原因,我實際上只獲得窗口編碼:( – user592704 2011-04-13 14:39:21

回答

0

執行以下操作:

  1. 當寫入一個文件:新的BufferedWriter(新OutputStreamWriter(新FileOutputStream中(文件), 「UTF-8」) );

  2. 從Web服務器中檢索圖像文件時,請不要在URL中使用除ASCII以外的任何內容。不幸的是,只有ASCII可以在所有Web客戶端和服務器上可靠地工作。

+0

所以也許這就是問題所在? UTF-8無法在任何地方工作?但是如果一個本地文件系統文件名是Cp1251西裏爾字母呢?那麼我怎樣才能保留這些文件的原始名稱呢?有沒有其他的方法? – user592704 2011-06-22 01:08:52

+0

問題不在於java環境(客戶端和服務器)。如您所知,Java對編碼提供了很好的支持。問題在於Web客戶端和Web框架:它們不支持非ASCII URL。問題出在HTTP規範本身,而不是實現。 ---你應該開發一個簡單的算法來將西里爾文的名字轉換成ascii url並返回。不是一個理想的解決方案,但會有效果。 – kwo 2011-06-22 09:09:50

+0

另一種解決方案應該是使用HTTP POST檢索圖像,因爲西里爾名稱將包含在請求正文中,而不是URL本身。另一個非理想的解決方案,但它至少應該工作。 – kwo 2011-06-22 10:10:29

相關問題