Java时间戳unicode问题

Java时间戳unicode问题,java,unicode,Java,Unicode,当我试图将时间戳作为post请求的参数传递时,在阿拉伯语手机等上,它似乎将其转换为unicode而不是长字符。有人能给我解释一下这背后的理论吗 这就是我生成时间戳字符串的方式 String timeStampString = String.format("%d",System.currentTimeMillis()/ 1000L); 但在服务器上,我得到的是unicode字符串,比如'\xd9\xa1\xd9\xa4\xd9\xa3\xd9\xa0\xd9\xa4\xd9\xa1\xd9\xa

当我试图将时间戳作为post请求的参数传递时,在阿拉伯语手机等上,它似乎将其转换为unicode而不是长字符。有人能给我解释一下这背后的理论吗

这就是我生成时间戳字符串的方式

String timeStampString = String.format("%d",System.currentTimeMillis()/ 1000L);
但在服务器上,我得到的是unicode字符串,比如
'\xd9\xa1\xd9\xa4\xd9\xa3\xd9\xa0\xd9\xa4\xd9\xa1\xd9\xa8\xd9
\xa8\xd9\xa2\xd9\xa0'

只需使用:

String timeStampString=String.valueOf(System.currentTimeMillis()/1000L)


String.format
不同,它总是使用“常规”数字“0”到“9”进行格式化。

String.format()
PrintWriter.format()
PrintWriter.printf()
使用的
格式化程序
类对区域设置敏感

这意味着如果您没有给它一个显式的区域设置,它将基于默认区域设置格式化数字

如果区域设置语言为阿拉伯语,则根据所使用的区域设置提供程序,数字格式可能使用“纯阿拉伯语”的数字

例如,以以下代码片段为例:

    int i = 1234567890;

    System.out.printf( "%d%n", i);
    Locale locale = new Locale("ar");
    System.out.printf( locale, "%d%n", i);
当区域设置提供程序为默认提供程序(“JRE”)时,它将显示:

1234567890 1234567890 使用英语区域设置,确保获得英语(请参见注释)数字

或者只需使用不区分区域设置的
String.valueOf(System.currentTimeMillis()/1000L)
Long.toString(System.currentTimeMillis()/1000L)





注意:数字0123456789实际上被称为“阿拉伯数字”,但在这种情况下,这个术语会令人困惑,因为阿拉伯语使用的实际数字是不同的(1633);(1636);(1638);(16390);

我的参数是
HashMap
。我明白你的意思,但那真的重要吗?为什么要将int/long值转换为unicode?感谢您的解释!你的回答是正确的。接受@realponsignist的解释。 java -Djava.locale.providers=CLDR SimpleTest 1234567890 ١٢٣٤٥٦٧٨٩٠
String.format("%d",System.currentTimeMillis()/ 1000L);
String.format(Locale.ENGLISH, "%d",System.currentTimeMillis()/ 1000L);