Java 选择给定特定区域设置的有用代码页

Java 选择给定特定区域设置的有用代码页,java,character-encoding,Java,Character Encoding,给定一个Java语言环境(例如Locale.FRANCE),如何选择一个合理的代码页来进行单字节编码?我可以从语言环境(例如“fr”)中获取语言,但将其转换为代码页(“ISO-8859-1”)似乎很棘手。据我所知,映射不一定是一对一的,所以在这一点上,我只是尝试猜测一些默认选项 public static Charset guessSinglebyteCharsetFromLocale(Locale loc) { // ... } 这里的用例是导出一个CSV文件以在Excel中使用。除

给定一个Java语言环境(例如Locale.FRANCE),如何选择一个合理的代码页来进行单字节编码?我可以从语言环境(例如“fr”)中获取语言,但将其转换为代码页(“ISO-8859-1”)似乎很棘手。据我所知,映射不一定是一对一的,所以在这一点上,我只是尝试猜测一些默认选项

public static Charset guessSinglebyteCharsetFromLocale(Locale loc) {
    // ...
}

这里的用例是导出一个CSV文件以在Excel中使用。除非用户明确通过数据->导入文本向导,否则Excel似乎不理解Unicode,并且要求他们能够“尽可能简单”地打开这些文件。在我的系统中,我知道当前用户的语言环境,因此我想自动猜测一个代码页,该代码页将对他们的数据造成最少的损坏

据我所知,java中没有一对一的java语言环境到java字符集的转换。您将需要构建一个包含应用程序可能遇到的语言环境的表


要使Excel识别转换的单字节文本,您的计算机需要使用控制面板中的区域/语言设置设置为“非unicode”应用程序的预期区域设置。这还提出了另一个要求,即一个csv文件中只能存在一个区域设置

将Unicode BOM添加到生成的文件中会帮助倒霉的Excel用户吗?根据我的经验,编写一个CSV Unicode文本文件,但偷偷地给它一个“.xslx”扩展名愚弄了他们所有人(但这放弃了电子表格中任何实际有用的Excel功能)。好主意-尝试过了,它工作了-Excel(至少是我可以访问的版本)现在可以正确解释UTF8文件。不幸的是,其他一些数据工具现在却被它所扼杀。bom似乎没有得到特别好的支持。不过,我认为这肯定是两害中较小的一害。谢谢。即使没有BOM表,它也很有可能正常工作,尽管您可能会在最不经意的时候使用导入向导,或者错误地导入数据。