如何根据操作系统定义charset?

时间:2011-11-15 06:38:04

标签: java character-encoding

例如:

在俄语中,有Koi8-r和cp866的字符集。在linux和unix的情况下,charset koi8-r工作正常。但在Windows和DOS的情况下cp866工作正常。有没有办法根据平台正确定义charset。我想要为所有语言都做到这一点。请提前帮助

3 个答案:

答案 0 :(得分:1)

仅根据操作系统的类型确定字符集是非常糟糕的。但是,在运行时确定字符集非常容易。在Unix上f.ex.我们有$LC_*类环境变量。在Java中,它更容易。

快速搜索以此页面为例:http://www.rgagnon.com/javadetails/java-0505.html

您想要的可能是java.nio.charset.Charset.defaultCharset().name()值。

答案 1 :(得分:1)

  

我的需求基于客户端和服务器操作。从客户端他们   请求一些文件。从请求我必须得到平台,基于   在那我必须编码服务器中的文件名并返回   效应初探。所以服务器将始终在同一平台上。基于客户端   平台,我必须回应。

您似乎认为客户端/服务器协议应根据客户端的操作系统和区域设置决定其字符编码。这不是必需的。例如,允许忽略HTTP Accept-Charset headerWhat is required(至少对于IETF协议)是能够使用UTF-8并声明编码(例如,Content-Type: text/html; charset=KOI8-R)。

除非您有其他令人信服的理由,否则我建议您以UTF-8发送回复。 That's what ⅔ of the Web does.

剩下的问题是如何确定服务器上的文件编码。大多数时间都有效的方法是:

  1. 如果验证为UTF-8,则假设它 UTF-8。
  2. 否则,假设平台的默认编码(例如,Martin建议的java.nio.charset.Charset.defaultCharset().name())。
  3. (如果需要,您还可以为UTF-32(带或不带BOM)和/或UTF-16(带BOM)添加检测。)

答案 2 :(得分:-1)

使用sun.jnu.encoding系统属性

请参阅What exactly is sun.jnu.encoding?