[英]Different character encoding in .net core class library
我正在开发一个API,并且遇到了字符编码的问题。 在运行.NET Core 2.1的解决方案中考虑以下两个项目:
这是我在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字符替换字符 并将其换成正确的字符。
也许不是最佳方法,但它解决了问题!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.