Java 如何根据操作系统定义字符集?

Java 如何根据操作系统定义字符集?,java,character-encoding,Java,Character Encoding,例如: 在俄语中,具有Koi8-r和cp866字符集。对于linux和unix,字符集koi8-r可以正常工作。但在windows和dos的情况下,cp866工作正常。是否有任何方法可以基于平台正确定义字符集。我希望对所有语言都这样做。请提前帮助感谢使用sun.jnu.encoding系统属性 请参见仅根据操作系统的类型确定字符集是非常糟糕的。但是,在运行时确定字符集非常容易。在unixf.ex上。我们有环境变量的$LC.*类。在Java中,这更容易 快速搜索会显示此页面,例如: 您需要的可能是

例如:


在俄语中,具有Koi8-r和cp866字符集。对于linux和unix,字符集koi8-r可以正常工作。但在windows和dos的情况下,cp866工作正常。是否有任何方法可以基于平台正确定义字符集。我希望对所有语言都这样做。请提前帮助感谢

使用
sun.jnu.encoding
系统属性


请参见

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

快速搜索会显示此页面,例如:

您需要的可能是
java.nio.charset.charset.defaultCharset().name()


我的需要是基于客户端和服务器的操作。从他们的客户那里 请求一些文件。根据请求,我必须获得平台,基于 在此基础上,我必须在服务器中对文件名进行编码并返回 回应。所以服务器将始终在同一个平台上。基于客户端 平台,我必须回复

您似乎认为客户机/服务器协议应该根据客户机的操作系统和语言环境来决定其字符编码。这不是必需的。例如,允许忽略。(至少对于IETF协议而言)是使用UTF-8和声明编码的能力(例如,
内容类型:text/html;charset=KOI8-R

除非您有令人信服的理由不这样做,否则我建议您使用UTF-8发送回复

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

  • 如果验证为UTF-8,则假定为UTF-8
  • 否则,假设平台的默认编码(例如,
    java.nio.charset.charset.defaultCharset().name()
    ,如Martin建议的那样)

  • (如果需要,您还可以为UTF-32(带或不带BOM)和/或UTF-16(带BOM)添加检测功能。

    @Martin Olsen谢谢,我没有进一步解释。。。编码始终依赖于平台:)更多:我的需求基于客户端和服务器操作。他们从客户端请求一些文件。根据请求,我必须获得平台,基于此,我必须在服务器中编码文件名并返回响应。所以服务器将始终在同一个平台上。基于客户端平台,我需要rturn响应。像HTTP这样的协议通常包含一个编码头。如果您使用专有协议,您应该在该级别处理编码。要么包含一个标头(如HTTP),要么决定传输的标准编码!用户可以在客户端选择任何语言。基于此,我必须更改编码。是否有基于平台为所有字符集定义适当字符集的可用列表。像这个。当一切都失败时,你能用UTF-8处理一切吗?你能更彻底地解释一下你的问题吗。什么是客户机/服务器设置。你在使用什么协议。您无法像下面解释的那样解决问题,但如果我们有更多可用信息,也许我们可以给您一些提示,让您找到更好的解决方案。Koi8-r在Windows中工作正常。Windows-1251呢?