Java时间戳unicode问题
当我试图将时间戳作为post请求的参数传递时,在阿拉伯语手机等上,它似乎将其转换为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
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);