Ну, я вижу это как серьезную тему!
Дело в том, что в Windows есть Excel. И многие программы должны взаимодействовать с ним. Excel использует локаль разделителя списка (разделение ячеек).
Основная проблема заключается в том, что «Значения, разделенные запятыми» не работают за пределами США (испанский (США)) и английского, потому что вы не можете использовать тот же символ разделителя списка, что и десятичный разделитель. Таким образом, мир за пределами США и Англии (включая армию США, которая (должна) следовать языковым нормам НАТО, десятичной запятой и т. Д. И мерам ISO) использует ;
в качестве разделителя списка для разделения ячеек в электронных таблицах, не путая его с десятичными запятыми.
Таким образом, в общем случае языковые настройки Windows для разделителя списков ;
, за исключением английского или американского языка, где разделитель списков ,
.
Excel имеет свои неудобства, связанные с американским / английским CSV; В стандартном американском и английском настройках один и тот же символ ,
является разделителем тысяч, а Excels сходит с ума (ячейки запираются, импортируя CSV с их использованием). Пропуск разделителя тысяч (если он совпадает с разделителем списка) Excel не распознает ячейки валюты и воспринимает их как текст. Что-то, с чем нам приходится жить в США и Англии, в остальном по всему миру это работает нормально (с ;
).
Интересная вещь (забавная мысль), если Java в Windows поддерживает NDK с доступом к библиотеке Win32? Потому что в Win32 вы звоните
GetLocaleInfoEx(LOCALE_NAME_USER_DEFAULT, LOCALE_SLIST, pwListSeparator, 4);
Не могу найти решение Java, получающее разделитель списка?
Я предлагаю использовать общее правило с жестким кодом, установите разделитель списка на ;
, если десятичный разделитель ,
, в противном случае установите разделитель списка на ,
, если не удается найти другой символ в методах локали или настройках как в Win32. Удалите (не используйте) тысячи разделителей, если они совпадают с разделителями списков.
Или использовать текстовые файлы с вкладками? Единственное неудобство заключается в том, что Windows по умолчанию открывает Excel для файла .csv и Блокнот для файла .txt с помощью ShellExecute (0, 0, pwFileName, 0, 0 , SW_SHOW) ;.
Примечательно, что в Java существует десятичный разделитель и разделитель тысяч, и я думаю, что следует использовать:
import java.text.DecimalFormatSymbols;
new DecimalFormatSymbols().getDecimalSeparator();
new DecimalFormatSymbols().getGroupingSeparator();