Не удалось перевести байты [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 " ü " состоит из двух байтов. Таким образом, существует несоответствие между заданным заголовком кодирования и передаваемыми данными. Поэтому вам нужно проверить код, который генерирует запрос.