I’m trying to send an object like this to my REST API(built with asp net core)
{
"firstName":"tersü",
"lastName":"asda"
}
And this is how the headers form SoapUI look:
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)
However, my actionContext.ModelState is always invalid because it can not work with the umlaute. The exception is the following:
Unable to translate bytes [FC] at index 35 from specified code page to
Unicode
If it’s any help, the method signature looks like this:
[ValidateUserData] public async Task<IActionResult> Update(string userId, [FromBody] UpdateUserRequest updateRequest)
Basically the code never goes over
if (!actionContext.ModelState.IsValid)
{
actionContext.Result = new BadRequestObjectResult(actionContext.ModelState);
}
inside the [ValidateUserData] attribute
What am I missing here?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
You are sending your string encoded in utf-16, but telling (in the Content-Type header’s charset) it is utf-8.
The bytes for tersü in utf-8 are:
74,65,72,73,C3,BC
However tersü (in utf-16) contains the bytes (notice the FC there):
74,0,65,0,72,0,73,0,FC,0
(Check it in this fiddle)
So it just can’t understand it. So either convert your string to utf-8 in your client before sending it, or set the Content-Type charset to utf-16 .
Method 2
Although the Content-Type is charset UTF-8 the received byte code FC denotes the extended ASCII character 252 which represents the umlaut “ü”.
In a UTF-8 encoding the umlaut “ü” consists of two bytes. So there is a mismatch between the given encoding header and the transmitted data. So you have to check the code which generates the request.
Method 3
Not a direct solution to the question asked – but a solution for a related problem:
I was having this error message when downgrading a Winforms application from Net.4.0 to Net.2.0 (because of 3rd party form control issues)
Every instance of an ImageList object that was specified in the forms designer was affected.
I cut all such instances out of the RESX file and out of the Designer code, made them private objects, and did the required initialization in the Form_Load event.
No problems since then in Net.2.0 or Net 4.0 configurations.
Method 4
I was having this error when working with SSRS on a .rdl file. The solution was that I needed to save the file as an unsigned UTF-8 file rather than a signed UTF-8 file. Here is how you do that in Visual Studio:
- Open your XML code by going to View -> Code, or pressing F7
- While viewing your XML code page, select File -> Advanced Save Options
- In the resulting pop-up windows select, “Unicode (UTF-8 without signature)…”
- Click OK
That fixed the problem for me, I hope it helps!
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0