2015-04-28 3 views
3

Я внедряю службу REST в Delphi XE3. Фактически доступ к:Delphi XE3 - datasnap REST сервер UTF8 output

для создания выходного документа XML. Непосредственно после нескольких часов тестирования различных методов преобразования UTF8 в Unicode я все еще не могу получить правильный вывод UTF8. Вот мой пример:

function TServerMethods1.UTF8TEST(Value: string): string; 
var metaData: TDSInvocationMetadata; 
    output: String; 
begin 
    metaData:= GetInvocationMetadata; 
    output:= '<element><inside name="skúška" /></element>'; 
    metaData.ResponseCode:= 200; 
    metaData.ResponseContentType:= 'text/xml; charset=utf-8'; 
    metaData.ResponseContent:= utf8encode(output); 
end; 

После вызова из интернет-браузера: http://localhost:8080/datasnap/rest/TServerMethods1/UTF8TEST я получил отчет КОДИРОВАНИЕ ERROR. После удаления специальных символов «úš» и установите имя только для «skuska», кажется, что все в порядке.

Любой может помочь, как правильно получить UTF8-кодированный выход ???

ответ

5

Наконец, после многих часов тестирования и поиска я нашел способ, как генерировать правильный вывод UTF8 XML с сервера DataSnap REST:

Function StringToStream(const AString: string): TStream; 
var utf8: utf8string; 
begin 
    utf8:= utf8encode(AString); 
    Result:= TStringStream.Create(utf8); 
end; 

function TServerMethods1.UTF8TEST(Value: string): TStream; 
var metaData: TDSInvocationMetadata; 
    output: String; 
begin 
    metaData:= GetInvocationMetadata; 
    output:= '<element><inside name="skúška" /></element>'; 
    metaData.ResponseCode:= 200; 
    metaData.ResponseContentType:= 'text/xml; charset=utf-8'; 
    //metaData.ResponseContent:= output; 
    result:= StringToStream(output); 
end; 

Решение было использовать TStream для отправки UTF8 кодируются строки вместо того, чтобы записывать его в metaData.ResponseContent напрямую (который всегда кодируется UNICODE - UTF16) ...

Смежные вопросы