【问题标题】:Russian characters are shown as ??? in java俄语字符显示为 ???在java中
【发布时间】:2019-03-07 11:48:27
【问题描述】:

我有一个控制器,它必须返回一个带有俄语名称的 JSON 字符串,但我得到的只是 ????? (无效字符)。

@Controller
public class ManifestController {

    @ResponseBody
    @RequestMapping(value = {"/manifest.json","/manifest"}, method = { RequestMethod.GET }, produces = {MediaType.APPLICATION_JSON_VALUE})

    public String getManifestJson(
            HttpServletRequest request)
    {
        Employee e= new Employee ();
        e.setName("Мегафон Игры"); 

        return JsonUtil.jsonStringify(e);  //it converts object to json using JsonObjectMapper


    }
}

【问题讨论】:

  • 我看不出你的代码中是如何使用Employee e 的。此外,您似乎根据您的标签知道您的问题
  • JsonUtil 请也显示这个类
  • 如何检查响应?
  • 很可能,无论您使用什么来显示响应,都无法处理俄语。
  • 很可能上面的代码不是问题所在。所以问题可能是:(1)Web 服务器向响应中添加了无效的标头(不太可能),(2)您的 Java 编译器对源代码使用了错误的编码(3)REST 服务客户端,(4)您的方式检查结果或显示结果。

标签: java json spring utf-8 utf-16


【解决方案1】:

我在我的机器上试过了,它可以工作

  User e = new User();
  e.setFirstName("Мегафон Игры");
  ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
  String json;
  json = ow.writeValueAsString(e);
  return json;

这是我收到的:

{
"id": 0,
"creationDate": null,
"username": null,
"firstName": "Мегафон Игры",
"lastName": null,
"email": null,
"updateDate": null,
"active": 0
}

【讨论】:

  • 我猜你没有使用网络控制器。通常它可以工作,但在弹簧 MVC 控制器的情况下,即使 System.out.println("Мегафон Игры") 它显示 ???在控制台中。我也尝试在 tomcat 的 server.xml 文件中添加 uriEncoder =utf-8"
猜你喜欢
  • 2019-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-28
  • 2012-04-27
  • 2016-04-25
  • 1970-01-01
相关资源
最近更新 更多