日历getDisplayName返回utf-8

时间:2015-06-03 13:53:16

标签: java utf-8 httprequest encode

我使用方法根据Locale.getDefault()

获取一个月的显示名称
private String getLocaleMonthString(Date date){
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal.getDisplayName(Calendar.MONTH, Calendar.SHORT, Locale.getDefault());

我以http request发送此结果,http request编码为UTF-8

显示名称是???对于某些语言,即使在我的日志中也是正确的。

问题是string不是用正确的编码创建的,但是我不知道在这段小代码中我可以在哪里更改/设置编码?

编辑:

按要求添加了httppost的代码

    Date date = null;
    HttpPost post = null;
    MultipartEntityBuilder builder = null;
    builder = MultipartEntityBuilder.create();
    builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
    builder.setCharset(Charset.forName(HTTP.UTF_8));
    date = getDateFromFile(file,0);
    String localeMonth = getLocaleMonthString(date);
    post = new HttpPost(url);
    builder.addPart("filePath", new StringBody(file.getAbsolutePath(),ContentType.TEXT_PLAIN));
    builder.addPart("date", new StringBody(getISODate(date), ContentType.TEXT_PLAIN));
    builder.addPart("localeMonth", new StringBody(localeMonth, ContentType.APPLICATION_FORM_URLENCODED));
    builder.addPart("type", new StringBody("video", ContentType.TEXT_PLAIN));

    HttpResponse response = null;

1 个答案:

答案 0 :(得分:1)

您可以为getLocaleMonthString编写类似以下内容的单元测试:

Calendar cal = Calendar.getInstance();
cal.setTime(new Date(1433367642000L));
assertEquals("\u05D9\u05D5\u05E0", cal.getDisplayName(Calendar.MONTH, Calendar.SHORT, new Locale("he")));

...其中1433367642000L现在是\u05D9\u05D5\u05E0יונ或" Jun"。或Calendar.LONG\u05D9\u05D5\u05E0\u05D9适用于6月יוני

因此,根据其他评论,从日期获取正确编码的字符并没有错,因为String不会处理编码。您需要检查在出站HTTP请求中如何发送它,以确保在那里正确处理编码。您的问题中不会显示该代码。