我正在编写一个测试应用程序。它由一个小型桌面应用程序和 servlet 组成。正如我所想,桌面是一个客户端,可以从任何操作系统连接到我的 servlet。太棒了,但我在服务器上有一个 txt 文件。我的桌面应用程序向 txt 文件(图像文件名)添加行。这些行可能包含西里尔文字,例如“картинка1.jpg”,这是最大的问题,因为我无法将原始西里尔文字图像名称返回给我的客户。这使得无法使用图像名称下载图像,因为服务器无法识别像“???????1.jpg”这样的图像名称来将其读回给我的客户端。我知道这都是编码问题,但我想知道如何使我的客户端桌面应用程序与 Linux 上的 servlet 一起正常工作?我的意思是,如果我的客户端和服务器具有不同的本地化和“file.encoding”,我该怎么办?
好吧...接受你的沉默我想解密一些细节...所以我所做的事情和我得到的事情是
- A)(客户端)我使用 JFileChooser 来获取 图像文件名(我们称之为nameX)
- B)(客户端)我使用 httpclient 4 并且 StringBody(nameX,"utf8") 发送 nameX 到我的 servlet
- C)(服务器)从 FileItems 获取 nameX 并将其写入(添加)到 N.txt 文件
- D)(客户端)我获取图像文件 显示的名称列表(以 cp1251 编码 因为客户支持它)和 选择“nameX”
- E)(客户端)发送“nameX” StringBody(nameX,"utf8") header 小服务程序
- F) (服务器) 获取 nameX 但对于某些 原因是这样的 ??????1.jpg 所以它无法识别 文件名是...
所以我的问题是某处是后退/之前的编码,我猜但我不确定......
我已经检查了我的服务器编码
- os.name = Linux
- sun.jnu.encoding = UTF-8
- 文件编码 = UTF-8
- 用户.语言 = en
我的客户是:
- os.name = Windows XP
- sun.jnu.encoding = Cp1251
- 文件编码 = Cp1251
- 用户.语言 = ru
请帮助我理解我做错了什么?
任何有用的评论都会受到赞赏:)
最佳答案
执行以下操作:
写入文件时: new BufferedWriter(new OutputStreamWriter(new FileOutputStream(File), "UTF-8"));
从 Web 服务器检索图像文件时,请勿在 URL 中使用除 ASCII 之外的任何内容。不幸的是,只有 ASCII 才能在所有 Web 客户端和服务器上可靠地工作。
关于java - 不同操作系统 - 如何使用客户端应用程序读取服务器txt文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5650928/