例如:
在俄语中,有Koi8-r和cp866的字符集。在linux和unix的情况下,charset koi8-r工作正常。但在Windows和DOS的情况下cp866工作正常。有没有办法根据平台正确定义charset。我想要为所有语言都做到这一点。请提前帮助
答案 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 header。 What is required(至少对于IETF协议)是能够使用UTF-8并声明编码(例如,Content-Type: text/html; charset=KOI8-R
)。
除非您有其他令人信服的理由,否则我建议您以UTF-8发送回复。 That's what ⅔ of the Web does.
剩下的问题是如何确定服务器上的文件编码。大多数时间都有效的方法是:
java.nio.charset.Charset.defaultCharset().name()
)。(如果需要,您还可以为UTF-32(带或不带BOM)和/或UTF-16(带BOM)添加检测。)
答案 2 :(得分:-1)
使用sun.jnu.encoding
系统属性