传递给http restlet服务时,日文文本出现乱码

时间:2010-04-06 13:57:03

标签: http encoding utf-8 request

我有一个调用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 !!

有人能告诉我我在做什么,以及如何解决这个问题?

提前感谢您的帮助。

此致 萨蒂什南比亚。

1 个答案:

答案 0 :(得分:0)

不要忘记将{em>编码客户端的数据编码为UTF-8。如果你说

'Content-Type' => 'application/octet-stream; charset=utf-8'

比那不能神奇地解决问题。这只是接收器的一个提示,它将从哪种形式获取数据。您还必须使用正确的格式发送它。在perl:

use utf8;
...
    'DocumentName' => utf8::encode($document_name),
...

... , utf8::encode($content) ...