Не удалось перевести байты [FC] с индекса 35 с указанной кодовой страницы в Unicode

Я пытаюсь отправить такой объект в мой REST API (построенный с asp net core)

{
    "firstName":"tersü",
    "lastName":"asda"
}

и вот как выглядят заголовки формы SoapUI:

 Accept-Encoding: gzip,deflate
Content-Type: application/json:charset=UTF-16
Host: localhost:4004
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
мой actionContext.ModelState всегда недействителен, потому что он не может работать с umlaute. Исключение составляет следующее:

не удалось перевести байты [FC] по индексу 35 с указанной кодовой страницы на Unicode

если это какая-либо помощь, подпись метода выглядит следующим образом:

[ValidateUserData]
public async Task<IActionResult> Update(string userId, [FromBody] UpdateUserRequest updateRequest)

в основном код никогда не превышает

if (!actionContext.ModelState.IsValid)
{
    actionContext.Result = new BadRequestObjectResult(actionContext.ModelState);
}

внутри [ValidateUserData] атрибут

что я пропустила?

2 ответов


вы отправляете свою строку, закодированную в utf-16, но говорю (в Content-Type кодировка заголовка) это utf-8.

в байт tersü на utf-8 являются:

74,65,72,73,C3,BC
tersü (in utf-16) содержит байты (обратите внимание на FC есть):
74,0,65,0,72,0,73,0,FC,0

(проверьте это в этой скрипку)

поэтому он просто не может этого понять. Поэтому либо преобразуйте строку в utf-8 в вашем клиенте перед отправкой, или набор the Content-Type charset в utf-16 .


хотя тип контента-кодировка UTF-8, полученный байтовый код FC обозначает расширенный символ ASCII 252, который представляет umlaut "ü".

в кодировке UTF-8 umlaut " ü " состоит из двух байтов. Таким образом, существует несоответствие между заданным заголовком кодирования и передаваемыми данными. Поэтому вам нужно проверить код, который генерирует запрос.