不同的操作系统 - 如何读取客户端应用程序的服务器txt文件

问题描述:

我正在编写一个测试应用程序。它由一个小型桌面应用程序和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

执行以下操作:

  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