我有一个调用http restlet服务(put方法)的Perl客户端。此调用中的某些参数包含日语文本。当我在restlet服务中打印这些请求参数的内容时,我发现这些字符乱码!
这是我的PERL客户端代码:
my %request_headers = (
'DocumentName' => $document_name, --> This name is a JAPANESE String
'DocumentDescription' => 'Test Japanese Chars',
'content-length' => 200,
'Content-Type' => 'application/octet-stream; charset=utf-8',
'User-Agent' => "JPCharTester",
);
$s->write_request('PUT', '/test-document/TEST/TEST_DOCUMENT' , %request_headers, $content);
在此调用中,$ context和$ document_name的值都是JAPANESE字符串。但只有document_name在我的后端服务中收到乱码。
这是服务代码:
String URL_ENCODING = "UTF-8";
String documentName = requestHeaders.getFirstValue("DocumentName");
System.out.println("Encoded Document Name : "+documentName+" <<<"); --> documentName is garbled here
try {
documentName = URLDecoder.decode(documentName, URL_ENCODING);
System.out.println(>>> Decoded Document Name : "+documentName+" <<<"); --> documentName is garbled here
} catch (java.io.UnsupportedEncodingException ex) {
throwException(ex.getMessage(), Status.SERVER_ERROR_INTERNAL, ex);
}
以上日志语句均打印 GARBLED TEXT !!
有人能告诉我我在做什么,以及如何解决这个问题?
提前感谢您的帮助。
此致 萨蒂什南比亚。
答案 0 :(得分:0)
不要忘记将{em>编码客户端的数据编码为UTF-8
。如果你说
'Content-Type' => 'application/octet-stream; charset=utf-8'
比那不能神奇地解决问题。这只是接收器的一个提示,它将从哪种形式获取数据。您还必须使用正确的格式发送它。在perl:
use utf8;
...
'DocumentName' => utf8::encode($document_name),
...
... , utf8::encode($content) ...