Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android NDK是否支持区域设置?_Android_Locale - Fatal编程技术网

Android NDK是否支持区域设置?

Android NDK是否支持区域设置?,android,locale,Android,Locale,我真正想做的就是按照正确的顺序使用strftime(“%x”)格式化日期。在大多数平台上,调用setlocale(“”就足够了。在安卓系统上,我一直得到!@#$美国日期 那么,Android不支持地区吗?根据答案是否定的 在C库/本机代码中不支持本地语言环境,这是有意的。 正如Elliot指出的,您唯一的希望是使用JNI获得相关的值 否。setlocale()和strftime()在Android NDK中不起作用,除非您想要的是Enu-US布局 我通过以下方式从Java部分获得本地语言: pL

我真正想做的就是按照正确的顺序使用strftime(“%x”)格式化日期。在大多数平台上,调用
setlocale(“”
就足够了。在安卓系统上,我一直得到!@#$美国日期

那么,Android不支持地区吗?

根据答案是否定的

在C库/本机代码中不支持本地语言环境,这是有意的。 正如Elliot指出的,您唯一的希望是使用JNI获得相关的值

否。
setlocale()
strftime()
在Android NDK中不起作用,除非您想要的是Enu-US布局

我通过以下方式从Java部分获得本地语言:

pLocaleData->pLocaleLanguage = new Locale("en").getDefault().getLanguage();
ANSI C
localeconv()
在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;另见。