web-dev-qa-db-ja.com

インデックス35のバイト[FC]を指定されたコードページから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はウムラウトでは機能しないため、常に無効です。例外は次のとおりです。

インデックス35のバイト[FC]を指定されたコードページからUnicodeに変換できません

助けになれば、メソッドシグネチャは次のようになります。

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

基本的にコードは決して行き渡らない

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

[ValidateUserData]属性

ここで何が欠けていますか?

9
DVM

utf-16でエンコードされた文字列を送信していますが、(Content-Typeヘッダーの文字セットで)utf-8であることを伝えています。

tersüutf-8のバイトは次のとおりです。

74,65,72,73,C3,BC

ただし、tersüutf-16内)にはバイトが含まれています(FCがあることに注意してください)。

74,0,65,0,72,0,73,0,FC,0

(それをチェックしてください このフィドルで

だからそれを理解することはできません。したがって、送信する前にクライアントで文字列をutf-8に変換するか、Content-Type文字セットをutf-16に設定します。

11
Jcl

Content-Typeは文字セットUTF-8ですが、受信したバイトコードFCは、ウムラウト "ü"を表す拡張ASCII文字252を示します。

UTF-8エンコーディングでは、ウムラウト「ü」は2バイトで構成されます。そのため、指定されたエンコードヘッダーと送信データの間に不一致があります。したがって、リクエストを生成するコードを確認する必要があります。

2
Ralf Bönning

.rdlファイルでSSRSを操作すると、このエラーが発生しました。解決策は、署名付きのUTF-8ファイルではなく、署名なしのUTF-8ファイルとしてファイルを保存する必要があることでした。 Visual Studioでこれを行う方法を次に示します。

  1. [表示]-> [コード]に移動するか、F7キーを押して、XMLコードを開きます。
  2. XMLコードページを表示しているときに、[ファイル]-> [詳細な保存オプション]を選択します。
  3. 表示されるポップアップウィンドウで、[Unicode(UTF-8署名なし)...]を選択します。
  4. OKをクリックします

これで問題が解決しました。お役に立てば幸いです。

0
Joey C