c# - .net核心类库中的不同字符编码
问题描述
我正在开发一个 API,并且遇到了字符编码的问题。在运行 .NET Core 2.1 的解决方案中考虑以下两个项目:
- MyApi.Web
- MyApi.Services
这是我在 Web 中的控制器的代码
[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 + " åäö";
}
当我从邮递员那里调用这个 api 时,我得到以下结果:
{
"message": "ControllerText: sv (SE)
System.Text.UTF8Encoding+UTF8EncodingSealed åäö ServiceText: sv
(SE) System.Text.UTF8Encoding+UTF8EncodingSealed
\ufffd\ufffd\ufffd"
}
为什么控制器和服务会为“åäö”字符提供不同的结果?尽管它们似乎具有相同的文化和编码。它必须与他们在不同的项目(Web 项目和类库)中创建字符串有关。
解决方案
好的,所以我终于想通了。
问题在于 Visual Studio 中的文件编码。我的第一个文件保存为 Unicode,而服务项目中的第二个文件保存为 ANSI。似乎您无法在 Visual Studio 中设置关于始终保存为何种编码的任何选项。这是从您的 Windows 语言设置中选择的。
我通过以下步骤解决了这个问题:
转到
Tools -> Options -> Environment -> Documents
并选中“无法在代码页中保存时将文档另存为 Unicode”在您的项目文件夹中运行以下命令:
Get-ChildItem *.cs -Recurse | ForEach- $content = $_ | Get-Content Set-Content -PassThru $_.Fullname $content -Encoding UTF8 -Force}
在您的解决方案中搜索并替换 unicode 字符替换字符 �,然后将其换成正确的字符。
也许不是最佳方法,但它解决了问题!
推荐阅读
- mysql - 如何修复:错误代码:1241。操作数应包含 1 个 comun?
- excel - 如何从单元格中删除公式并用 VBA 中的数字替换?
- r - 使用带有前缀列名的 mutate_at 来比较值
- css - 如何在div内放置固定位置的recharts图表的工具提示?
- php - Ajax 发布问题
- java - 如何停止执行方法但继续父循环?
- react-native - 使用 React-Native 制作可触摸透明的一部分
- json - POST 请求在 APEX_WEB_SERVICE 调用中返回错误的请求响应
- c++builder - DLL 中的 EOutOfResources
- sed - 更快地为一系列行运行 sed