Sim*_*n07 8 java csv operating-system regional list-separator
我正在编写一个Java导出器,它应该尊重用户的自定义设置,尤其是用作分隔符的"列表分隔符".
在Windows中,可以设置此List分隔符
Control Panel -> Regional and Language Options -> Regional Options -> Customize
Run Code Online (Sandbox Code Playgroud)
我不知道其他操作系统,但我很确定你也可以在其他操作系统上改变它.
将此自定义设置从操作系统转换为Java的最佳方法是什么?我在Eclipse RCP环境中,所以如果有可用的话,我可能会使用与RCP相关的解决方案.
从这个答案的评论:
读取特定于操作系统的设置是我必须要满足的.
那么,如果Windows以外的操作系统没有这样的设置怎么办?
我建议你从Windows注册表中读取它(如提到这里):读取使用Java Windows注册表/写.在其他平台上只使用一个很好的默认值,也许,至少在Unix上,也支持通过自定义环境变量(你很好地记录)配置它:我的java代码如何读取OS环境变量?.
我的直觉是操作系统普遍没有(系统范围或用户特定的)"列表分隔符"设置可能是错误的,当然,但我怀疑.
除了在应用程序中为用户提供自己的选项之外,您还可以尝试猜测列表分隔符是什么.
我看了一下Windows中的一些语言环境,看到列表分隔符是";" 要么 ",".我听说在一些不起眼的地方还有另一个角色,但我自己也没见过.因此,如果您可以使您的代码同时处理";" 和","作为列表分隔符,那么你可能会涵盖大多数情况.
此外,看起来当","用作小数分隔符时,","从不用作列表分隔符.我猜这是否则数字将无法在列表中区分:1,2,3,4可能是1.2,3.4或1,2.3在这些情况下";" 用作列表分隔符.不幸的是,事实并非如此.阿拉伯语有"." 作为小数符号和";" 作为列表分隔符.
所以我认为可以合理安全地遵循的规则是:
if (decimalSeparator == ',')
then listSeparator = ';'
else if (decimalSeparator == '.')
then listSeparator = new char[] {';', ','}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6069 次 |
最近记录: |