我一直在WebAPI项目(.NET Core 2.0)上使用DbContext(MySql.Data.EntityFrameworkCore 6.10.6)一段时间没有任何问题,但现在我需要在控制台应用程序和特殊字符上使用相同的上下文没有正确加载。
的WebAPI:
public class ProductsController : Controller
{
private readonly MyDbContext _context;
public ProductsController(MyDbContext context)
{
_context = context;
}
[HttpGet]
public string Get()
{
var productName = _context.Products
.Single(x => x.Id == 1)
.Name;
return productName; = // "PÃO FRANCÊS"
}
}
App控制台:
private static void Main(string[] args)
{
// setup DI
Initialize();
var context = ServiceProvider.GetService<MyDbContext>();
var productName = context.Products
.Single(x => x.Id == 1)
.Name;
Console.WriteLine(productName); // "P�O FRANC�S"
}
即使使用相同的上下文,为什么这些值会有所不同?
更新1:将Console.OutputEncoding更改为UTF8或将控制台字体更改为Lucidas控制台或控制台未更改结果。控制台应用程序的真正目的是调用API,并在调试时从数据库中检索值时结果具有 字符。我不需要在控制台上打印结果。
更新2:调试通过productName
变量时,从Visual Studio中立即窗口中调用productName
或?productName
时,该值不会更改。
更新3:我已使用MS SQL Server配置了测试数据库,并且正确加载了字符。看起来它是MySql.Data.EntityFrameworkCore的一个问题
更新4:使用.NET Framework 4.7.1使用新的控制台应用程序对其进行测试,并正确显示字符。
解决方案是将此行添加到控制台应用程序。
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
尝试添加此项以使特殊字符正确加载。
Console.OutputEncoding = System.Text.Encoding.Unicode;