Asp.net

無法翻譯字節FCFCFC從指定程式碼頁到 Unicode 的索引 35

  • July 17, 2020

我正在嘗試將這樣的對象發送到我的 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)

但是,myactionContext.ModelState始終無效,因為它不能與變音符號一起使用。例外情況如下:

無法翻譯字節

$$ FC $$從指定程式碼頁到 Unicode 的索引 35

如果有任何幫助,方法簽名如下所示:

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

基本上程式碼永遠不會結束

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

[ValidateUserData]屬性裡面

我在這裡想念什麼?

您正在發送編碼為 的字元串utf-16,但告訴(在Content-Type標頭的字元集中)它是utf-8.

tersüin的字節為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因此,要麼在發送之前將字元串轉換為客戶端,要麼將Content-Type字元集設置為utf-16.

雖然 Content-Type 是字元集 UTF-8,但接收到的字節碼 FC 表示擴展的 ASCII 字元 252,它表示變音符號“ü”。

在 UTF-8 編碼中,變音符號“ü”由兩個字節組成。因此,給定的編碼標頭和傳輸的數據之間存在不匹配。所以你必須檢查生成請求的程式碼。

引用自:https://stackoverflow.com/questions/39076157