在从节点到Java的调用中强制执行utf8编码

Mat*_*nis 9 javascript java jetty utf-8 node.js

我正在从节点中间层到Java后端进行调用,并将字符串作为查询参数传递.一切都很好,直到使用非英文字母字符(例如:ř,ý).当Java收到这些字符时,它会抛出:

parse exception: org.eclipse.jetty.util.Utf8Appendable$NotUtf8Exception: Not valid UTF8!
Run Code Online (Sandbox Code Playgroud)

此调用完美无缺:

GET http://localhost:8000/server/name?name=smith
Run Code Online (Sandbox Code Playgroud)

此调用失败,出现上述错误:

GET http://localhost:8000/server/name?name=so?ovský
Run Code Online (Sandbox Code Playgroud)

我的问题涉及到哪里解决这个问题.我已经找到了这个节点的utf8编码器,并考虑在将来调用我的Java层之前将我的字符串编码为utf8.这是正确的方法还是我应该在Java中做些什么?

请注意,这是我的相关请求标头的样子:

{
  ...
  accept: 'application/json, text/plain, */*',
  'accept-encoding': 'gzip, deflate, sdch',
  'accept-language': 'en-US,en;q=0.8,el;q=0.6',
  ...
}
Run Code Online (Sandbox Code Playgroud)

A-3*_*312 1

将 JavaScript 文件保存为 utf8。

\n\n
var name = "so\xc5\x99ovsk\xc3\xbd",\n    param1 = encodeURIComponent(name);\n\nvar url = "http://localhost:8000/server/name?name=" + param1;\n\nconsole.log(url);\n// http://localhost:8000/server/name?name=so%C5%99ovsk%C3%BD\n
Run Code Online (Sandbox Code Playgroud)\n\n

你可以看到日志GET http://localhost:8000/server/name?name=so\xc5\x99ovsk\xc3\xbd

\n\n
{\n  "args": {\n    "name": "so\xc5\x99ovsk\xc3\xbd"\n  }, \n  "headers": {\n    "Accept": "application/json, text/plain, */*",\n    "Accept-encoding": "gzip, deflate, sdch",\n    "Accept-language": "en-US,en;q=0.8,el;q=0.6",\n    //...\n  },\n  "url": "http://localhost:8000/server/name?name=so\xc5\x99ovsk\xc3\xbd"\n}\n
Run Code Online (Sandbox Code Playgroud)\n