gpt4 book ai didi

c# - .net 核心类库中的不同字符编码

转载 作者:行者123 更新时间:2023-11-30 18:14:00 25 4
gpt4 key购买 nike

我正在开发 API 时遇到了字符编码问题。考虑运行 .NET Core 2.1 的解决方案中的以下两个项目:

  • MyApi.Web
  • MyApi.Services

这是我在 Web 中的 Controller 的代码

[HttpGet("text")]
public async Task<JsonResult> GetText()
{
string culture = CultureInfo.CurrentCulture.DisplayName;
string encoding = Encoding.Default.ToString();

string controllerText = culture + " " + encoding + " åäö";
string serviceText = await _slotService.GetText();

return _responseBuilder.Success("ControllerText: " +
controllerText + " ServiceText: " + serviceText);
}

这是我服务的代码:

    public async Task<string> GetText()
{
string culture = CultureInfo.CurrentCulture.DisplayName;
string encoding = Encoding.Default.ToString();
return culture + " " + encoding + " åäö";
}

当我从 postman 调用这个 api 时,我得到以下结果:

{
"message": "ControllerText: sv (SE)
System.Text.UTF8Encoding+UTF8EncodingSealed åäö ServiceText: sv
(SE) System.Text.UTF8Encoding+UTF8EncodingSealed
\ufffd\ufffd\ufffd"
}

为什么 Controller 和服务会针对“åäö”字符给出不同的结果?即使他们似乎具有相同的文化和编码。这一定与他们在不同项目(Web 项目和类库)中创建字符串有关。

最佳答案

好吧,所以我终于想通了。

问题出在 Visual Studio 中的文件编码上。我的第一个文件保存为 Unicode,而服务项目中的第二个文件保存为 ANSI。似乎您无法在 Visual Studio 中设置任何关于始终保存为哪种编码的选项。这是从您的 Windows 语言设置中选择的。

我通过以下步骤解决了这个问题:

  1. 转到 Tools -> Options -> Environment -> Documents 并选中“Save document as Unicode when cannot be saved in codepage”

  2. 在您的项目文件夹中运行以下命令:

    Get-ChildItem *.cs -Recurse | ForEach-
    $content = $_ | Get-Content
    Set-Content -PassThru $_.Fullname $content -Encoding UTF8 -Force}
  3. 在您的解决方案中搜索并替换 unicode 字符替换字符 � 并将其替换为正确的字符。

也许不是最佳方法,但它解决了问题!

关于c# - .net 核心类库中的不同字符编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51520451/

25 4 0
文章推荐: javascript - 无法使用 javascript 将新文本框动态添加到
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com