Android NDK是否支持区域设置?
我真正想做的就是按照正确的顺序使用strftime(“%x”)格式化日期。在大多数平台上,调用Android NDK是否支持区域设置?,android,locale,Android,Locale,我真正想做的就是按照正确的顺序使用strftime(“%x”)格式化日期。在大多数平台上,调用setlocale(“”就足够了。在安卓系统上,我一直得到!@#$美国日期 那么,Android不支持地区吗?根据答案是否定的 在C库/本机代码中不支持本地语言环境,这是有意的。 正如Elliot指出的,您唯一的希望是使用JNI获得相关的值 否。setlocale()和strftime()在Android NDK中不起作用,除非您想要的是Enu-US布局 我通过以下方式从Java部分获得本地语言: pL
setlocale(“”
就足够了。在安卓系统上,我一直得到!@#$美国日期
那么,Android不支持地区吗?根据答案是否定的
在C库/本机代码中不支持本地语言环境,这是有意的。
正如Elliot指出的,您唯一的希望是使用JNI获得相关的值
否。setlocale()
和strftime()
在Android NDK中不起作用,除非您想要的是Enu-US布局
我通过以下方式从Java部分获得本地语言:
pLocaleData->pLocaleLanguage = new Locale("en").getDefault().getLanguage();
ANSI Clocaleconv()
在Android NDK中不起作用:
struct lconv *localeconv(void);
另外,获取用户名的标准Unix方式在Android中不起作用
char *p = getenv("USER");
因此,您需要使用Java端来获取区域设置信息
String LocaleCountry = new Locale("en").getDefault().getCountry();
String LocaleLanguage = new Locale("en").getDefault().getLanguage();
String LocaleCurrency = new DecimalFormatSymbols().getCurrency().toString();
String LocaleShortDateTimePattern =new SimpleDateFormat().toPattern();
char LocaleDecimalSeparator = new DecimalFormatSymbols().getDecimalSeparator();
char LocaleThousandSeparator = new DecimalFormatSymbols().getGroupingSeparator();
String LocaleThousandGrouping =
String.format("%d;0", new DecimalFormat().getMaximumFractionDigits());
String LocaleNegativePrefix = new DecimalFormat().getNegativePrefix();
String LocaleNegativeSuffix =new DecimalFormat().getNegativeSuffix();
String Operator = Utils.getQwnername(context);
看起来是Android Java/Android实现(手机)在千位分隔符问题上的一个主要缺陷。=新的DecimalFormatSymbols().getGroupingSeparator();生成0xa0(ISO/IEC 8859-1 NBSP,而不是UTF8)而不是用于ISO标准/德国-瑞典等(非美国)分组的0x20空格分隔符。这会导致Java代码在使用时崩溃。要使用,必须在读取0xa0=new DecimalFormatSymbols()后将Java代码中的0xa0更改为0x20;另见。