Японский текст искажен при передаче в службу http restlet - PullRequest
0 голосов
/ 06 апреля 2010

У меня есть клиент Perl, который вызывает службу http restlet (метод put). Некоторые параметры в этом вызове содержат японский текст. Когда я напечатал содержимое этих параметров запроса в сервисе 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 Strings. Но ТОЛЬКО 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);
}

напечатаны оба вышеприведенных оператора журнала Захваченный текст !!

Может кто-нибудь сказать мне, какую ошибку я делаю и как это исправить?

Заранее спасибо за помощь.

С уважением, Сатиш.

1 Ответ

0 голосов
/ 06 апреля 2010

Не забудьте кодировать данные на стороне клиента как UTF-8.Если вы скажете

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

, то это волшебным образом не решит проблему.Это просто подсказка для получателя, в каком виде он будет получать данные.Вы также должны отправить в правильном формате.В perl:

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

... , utf8::encode($content) ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...